在用Java编译程序时,我得到了这个大警告
警告:[未选中]取消选中调用 LinkedList(java.util.Collection)作为raw的成员 输入java.util.LinkedList
在这一行:
LinkedList<Integer> li2 = new LinkedList(li);
这个警告是什么意思?
编辑:
应该是事实:LinkedList<Integer> li2 = new LinkedList<Integer>(li);
但是如果你还是请回答这个问题。
答案 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);
原始类型是具有类型参数的类型,但在没有参数的情况下使用。它由于遗留原因而受支持,但您不应该在新代码中使用它。