为什么编译器在声明变量时发出警告
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/