Java 为什么不';在将原始类型分配给泛型类型时,您不会遇到编译器错误吗?
我一直在看OJCPA代码片段,我不明白为什么编译器不会在下面的代码中抛出错误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.
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
ofString
s,但它是在将泛型添加到Java之前编写的,因此它返回一个原始List
您希望此行通过编译:
List<String> strList = someOldMethodThatReturnsRawList();
List strList=someOldMethodThatReturnsRawList();
否则,您将不得不继续使用原始
列表
键入新代码以调用该方法。这里的更多信息我希望他们需要一个cast或一些其他语法指示,表明编码人员知道他/她在做什么。但我不知道他们当时使用的各种竞争性设计标准,因此必须相信他们有充分的理由:所以,您可以将任何原始类型分配给类型化类吗?