gpt4 book ai didi

java - 为什么第 4 行不生成未经检查的异常?

转载 作者:搜寻专家 更新时间:2023-11-01 01:18:32 24 4
gpt4 key购买 nike

/*1.*/ List l = new ArrayList<Number>();
/*2.*/ List<String> ls = l; // unchecked warning
/*3.*/ l.add(0, new Integer(42)); // another unchecked warning
/*4.*/ String s = ls.get(0);

如果第 2 行和第 3 行产生未经检查的警告,那么为什么第 4 行不产生未经检查的警告,因为编译器不知道“ls”指的是什么(List<String>List<Integer>)。

(注意:根据 OP 的原始帖子进行了编辑,以使代码按预期显示 - 特别是在所有位置都包含 List<E> 的类型参数。)

最佳答案

编译器认为 ls将真正引用字符串列表 - 如果没有危险操作 - 即第 2 行,第 4 行将是“安全的”(就类型安全而言)。

在不涉及其他警告的情况下,List<String>应该总是结束引用仅包含对字符串(或空值)的引用的列表。但是,如果您已经破坏了类型安全,那么一切都将失败(除了 VM 将在执行时捕获这些类型违规之外)。

警告显示哪些行是危险的 - 在这种情况下,您使用原始类型的地方,即您说,“好吧,我们这里有一个列表。我不知道里面有什么不过。”

第 4 行不引用任何原始类型的变量 - 它引用调用 getList<String> 上, 并将返回值赋给 String多变的。如果您认为这应该产生警告,请说明 Java 语言规范的哪一部分建议警告是合适的 - 我认为您会发现这样做很难。

关于java - 为什么第 4 行不生成未经检查的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7638840/

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