gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:16 25 4
gpt4 key购买 nike

我一直在查看 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
}

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

谢谢你的帮助。

最佳答案

允许向后兼容。

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

你希望这一行通过编译:

List<String> strList = someOldMethodThatReturnsRawList();

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

关于java - 为什么在将原始类型分配给泛型类型时不会出现编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com