这个错误描述是什么意思?

时间:2010-02-28 14:58:37

标签: java generics warnings

在用Java编译程序时,我得到了这个大警告

  

警告:[未选中]取消选中调用   LinkedList(java.util.Collection)作为raw的成员   输入java.util.LinkedList

在这一行:

LinkedList<Integer> li2 = new LinkedList(li);

这个警告是什么意思?

编辑:

应该是事实:LinkedList<Integer> li2 = new LinkedList<Integer>(li);

但是如果你还是请回答这个问题。

2 个答案:

答案 0 :(得分:3)

未选中原始类型。使用

LinkedList<Integer> li2 = new LinkedList<Integer>(li);

你永远不应该在新代码中使用原始类型。它仅提供向后兼容性原因。见JLS 4.8

  

为了便于与非通用遗留代码接口,还可以使用参数化类型(第4.5节)的擦除(第4.6节)作为类型。这种类型称为原始类型。

     

原始类型的使用仅允许作为遗留代码兼容性的让步。强烈建议不要在将通用性引入Java编程语言之后编写的代码中使用原始类型。 未来版本的Java编程语言可能会禁止使用原始类型。

重点是他们的,不是我的。


您在原始问题中添加了更正,暗示您希望专门使用原始类型。这似乎违背了泛型提供的类型安全的目的,但您始终可以使用List<Object>来实现此目的。它不再是原始的,所以它保证在将来有效,尽管它确实没有给你任何类型安全。

根据具体情况,您也可以List<?>查看无界通配符。

答案 1 :(得分:0)

当你像这样调用构造函数时,

LinkedList:

LinkedList<Integer> li2 = new LinkedList<Integer>(li);

原始类型是具有类型参数的类型,但在没有参数的情况下使用。它由于遗留原因而受支持,但您不应该在新代码中使用它。