Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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 为什么不';在将原始类型分配给泛型类型时,您不会遇到编译器错误吗?_Java_Generics - Fatal编程技术网

Java 为什么不';在将原始类型分配给泛型类型时,您不会遇到编译器错误吗?

Java 为什么不';在将原始类型分配给泛型类型时,您不会遇到编译器错误吗?,java,generics,Java,Generics,我一直在看OJCPA代码片段,我不明白为什么编译器不会在下面的代码中抛出错误 List l = new ArrayList(); l.add("a"); l.add("b"); l.add(1); List<String> strList = new ArrayList<>(); strList = l; //#1 - Why does the assignment compile? for(String s: strList) { System.out.

我一直在看OJCPA代码片段,我不明白为什么编译器不会在下面的代码中抛出错误

List l = new ArrayList();
l.add("a");
l.add("b");
l.add(1);

List<String> strList = new ArrayList<>();
strList = l; //#1 - Why does the assignment compile?

for(String s: strList) {
      System.out.println(s); //#2 - It makes sense that it then throws a ClassCastException
}
listl=newarraylist();
l、 添加(“a”);
l、 添加(“b”);
l、 增加(1);
List strList=new ArrayList();
strList=l//#1-作业为什么要编译?
for(字符串s:strList){
System.out.println(s);//#2-然后抛出ClassCastException是有意义的
}
我认为编译器会将列表l视为原始类型,因为泛型是不变的,所以会产生编译器错误,因为它不是List类型


感谢您的帮助。

允许向后兼容

假设您正在调用一个遗留方法,该方法返回一个
List
of
String
s,但它是在将泛型添加到Java之前编写的,因此它返回一个原始
List

您希望此行通过编译:

List<String> strList = someOldMethodThatReturnsRawList();
List strList=someOldMethodThatReturnsRawList();

否则,您将不得不继续使用原始
列表
键入新代码以调用该方法。

这里的更多信息我希望他们需要一个cast或一些其他语法指示,表明编码人员知道他/她在做什么。但我不知道他们当时使用的各种竞争性设计标准,因此必须相信他们有充分的理由:所以,您可以将任何原始类型分配给类型化类吗?