我一直在看OJCPA代码片段,我很困惑,为什么编译器不会在以下代码中抛出错误.
List l = new ArrayList(); l.add("a"); l.add("b"); l.add(1); ListstrList = 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 }
我认为编译器会将List l视为原始类型,并且因为泛型是不变的,所以它会产生编译器错误,因为它不是List
谢谢你的帮助.
它允许向后兼容.
假设你调用一个返回的传统方法List
的String
S,但它被写入之前仿制药加入到Java,所以它返回原始List
.
您希望此行传递编译:
ListstrList = someOldMethodThatReturnsRawList();
否则,您必须List
在新代码中继续使用原始类型才能调用该方法.