当前位置:  开发笔记 > 编程语言 > 正文

将原始类型分配给泛型类型时,为什么不会出现编译器错误?

如何解决《将原始类型分配给泛型类型时,为什么不会出现编译器错误?》经验,为你挑选了1个好方法。

我一直在看OJCPA代码片段,我很困惑,为什么编译器不会在以下代码中抛出错误.

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

List 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
}

我认为编译器会将List l视为原始类型,并且因为泛型是不变的,所以它会产生编译器错误,因为它不是List 类型.

谢谢你的帮助.



1> Eran..:

它允许向后兼容.

假设你调用一个返回的传统方法ListStringS,但它被写入之前仿制药加入到Java,所以它返回原始List.

您希望此行传递编译:

List strList = someOldMethodThatReturnsRawList();

否则,您必须List在新代码中继续使用原始类型才能调用该方法.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有