当前位置: 首页 > 面试题库 >

类型安全:该方法属于原始类型,应引用泛型的引用

宗政颖逸
2023-03-14
问题内容

Eclipse在正在运行的项目中仅使用以下代码(在其中仅包含伪类和main方法)给我警告(标题中):

List a = new ArrayList();
List<Integer> b = new ArrayList<Integer>();
int x = 19;
a.add(x);

最后一行触发警告。我不确定我在这里做错了什么,或者实际上我在做什么。我是一名Java学生,正在研究一个可疑的教程,并且试图理解泛型。假设变量x不能说明类型安全性。我尝试将其强制转换为对象类型(我认为它没有任何作用,因为它已经存在了),并且不起作用。

我如何解决此警告?


问题答案:

您声明时List a没有类型参数。这就是eclipse抱怨类型安全的原因,因为您可以将任何类型的对象添加到该列表中。

如果您查看ArrayList
api
并查看类声明,则会看到它的声明如下:

public class ArrayList<E>

将E替换为所需的任何类。

List<Integer> b您明确告诉编译器之后,该列表将Integer仅保存对象的实例,并且编译器可以对此进行验证,从而为您提供类型安全。



 类似资料:
  • 问题内容: 我有一个笼子课: 我试图在另一个类main方法中实例化Cage对象: 我收到错误:笼子是原始类型。泛型Cage的引用应参数化。我尝试了几个想法,但对这种棘手的语法感到困惑:o( 问题答案: 是通用类型,因此您需要指定一个类型参数,例如这样(假设有一个): 您可以使用任何扩展的类型(甚至是自身)。 如果省略type参数,那么在这种情况下最终得到的是。但是,即使这是您想要的,您仍应明确声明

  • 问题内容: 我有以下课程(来自简单的Spring教程) 其中Validator类是Spring 2.5中的类。 如果我尝试向其中添加参数,则supports方法显示警告(Class是原始类型。对泛型类型Class的引用应进行参数化) 我收到以下错误: 关于这种类型的问题有很多线索,但是我想获得一个完整的答案并真正理解它,而不会用“隐藏”这个问题! 问题答案: 接口使用原始类型声明该方法。在这种情况

  • 问题内容: 为了保存一个由一个成员完成的付款的ArrayList,我想将“付款列表ID”更改为一个字符串,因此我创建了以下方法: 但是我收到以下警告: 谁能解释我为什么? 问题答案: 您绝对应该阅读有关Java泛型的本教程 :http : //docs.oracle.com/javase/tutorial/java/generics/ 简而言之: 许多Java类和类型(称为 泛型类 或 泛型类型

  • 我有一个有界泛型类,我们称之为泛型,它的参数T扩展了抽象类abstract: 泛型类: 抽象类 泛型类中T引用的类 当尝试引用方法 getMap() 时,该方法来自 T 边界内的类(并且根据抽象类定义,T 的所有可能实例都将具有该方法),我收到以下错误: 不能从静态上下文引用非静态方法getMap() 然而,任何地方都没有静态关键字。我错过了什么?? 谢谢!

  • 问题内容: 我之前在程序中有这些确切的代码行,但没有收到此错误。我做了一些搜索,发现的结果使我有些头疼。有任何想法吗? 错误是: 问题答案: 您可以使用: 发生这种情况是因为现在是泛型类。

  • 我读了很多文章,但我不明白这两行之间的区别: 我看到的唯一区别是第一行触发了“未检查的分配”警告。