java - 声明泛型类型时的编译器警告

标签 java oop generics scjp

为什么编译器在声明变量时发出警告

 List<? extends Object> list = new LinkedList();

警告:

Note: ZiggyTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

但是当我将变量声明为

时它不会发出警告
List<?> list = new LinkedList();

最佳答案

如果您使用没有类型说明符的集合(例如 Arraylist() 而不是 ArrayList<String>() ),这会出现在 Java 5 及更高版本中。这意味着编译器无法使用 generics 检查您是否以类型安全的方式使用集合。 .

要消除警告,只需具体说明您在集合中存储的对象类型。所以,而不是

List list = new ArrayList();

应该是

List<String> list = new ArrayList<String>();

在您的情况下,如果您按如下方式修改该语句,

List<? extends Object> list = new LinkedList<Object>();

它会在没有警告的情况下编译,因为我们现在使用通用类型 ( <Object> ) 使其类型安全。

关于java - 声明泛型类型时的编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695734/

相关文章:

c++ - C++成员函数自定义类型返回 'does not name a type'错误

C# 返回正确的对象类型

c# - 排序 IList 时未调用比较器

java - 如何从官方仓库构建 neo4j-jdbc 驱动程序?

java - 将对象存储在数组中并显示它们(Java)

java - lwjgl 中的 GL_TEXTURE_2D_ARRAY 不工作

java - return 语句应该在 Java 中使用泛型吗?

.net - 你接受接口(interface)作为构造函数参数吗?

java - 从 JList 中删除一行

java - 获取请求仅适用于尾部斜杠(spring REST 注释)