Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';每个声明和内容之间的差异';这对每个人都有什么影响? List listOne=newlinkedlist(); List listTwo=新建LinkedList(); List listThree=新的LinkedList(); List listFour=新建LinkedList();_Java_Generics_Collections - Fatal编程技术网

Java 什么';每个声明和内容之间的差异';这对每个人都有什么影响? List listOne=newlinkedlist(); List listTwo=新建LinkedList(); List listThree=新的LinkedList(); List listFour=新建LinkedList();

Java 什么';每个声明和内容之间的差异';这对每个人都有什么影响? List listOne=newlinkedlist(); List listTwo=新建LinkedList(); List listThree=新的LinkedList(); List listFour=新建LinkedList();,java,generics,collections,Java,Generics,Collections,没有使用泛型(即Java 5之前的代码),没有类型安全性 List<Shxx> listTwo = new LinkedList<Shxx>(); List listThree = new LinkedList(); List listFour=new LinkedList(); 将导致编译器警告,但在其他情况下为OK,因为列表只能通过typesafe引用使用,并且最初为空。无论如何都不应该这样做,因为如果您忽略了有关使用原始类型的编译器警告,那么您也可能忽略了其他

没有使用泛型(即Java 5之前的代码),没有类型安全性

List<Shxx> listTwo = new LinkedList<Shxx>();
List listThree = new LinkedList();
List listFour=new LinkedList();

将导致编译器警告,但在其他情况下为OK,因为列表只能通过typesafe引用使用,并且最初为空。无论如何都不应该这样做,因为如果您忽略了有关使用原始类型的编译器警告,那么您也可能忽略了其他没有此类型那么好的警告。从泛型中获得最大类型安全性的最佳方法是消除所有相关的编译器警告。

listOne
listThree
仅在代码中作为对象列表可用(另外,IDE可能会同时显示这两个方面的警告,因为
listOne
的实例化意味着未经检查的集合的使用,而
listThree
的实例化则是应检查集合的原始使用)

对于这两个列表,您可以添加任何类型的对象(
String
,作为原型示例)

listwo
被声明为
Shxx
的经典
List

对于此列表,编译器只允许您添加
Shxx
类型的项

listFour
的声明编译并使列表可用(如
listTwo
)作为
Shxx
列表(但我不建议这样写)


最后,尽管这些列表在声明的代码中不能以同样的方式使用,但您必须知道它们在运行时都是等价的(但从理论上讲,很长一段时间内您将无法克服这些泛型限制).

简短回答:使用第二个版本,放弃rest@Declaration清单四中的一个对我来说很好。@Michael_Borgwardt嗯,是的,你是,对的,我会相应地改变我的答案很好,但是你说“可能”是什么意思?首先,你的意思是插入的元素将是像对象类型一样的句柄吗?对不起,请原谅mistake@MineIsMine:是的,效果与listThree完全相同,没有可用的类型信息。
List<Shxx> listTwo = new LinkedList<Shxx>();
List listThree = new LinkedList();
List<Shxx> listFour = new LinkedList();