gpt4 book ai didi

java - 从 Iterable 转换为 Iterable 总是安全的吗?
转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:31 29 4
gpt4 key购买 nike

是从 Iterable<?> 类型转换的至 Iterable<Object>总是安全的?

看起来是这样,因为我看不出有什么方法可以滥用它来产生意想不到的 ClassCastException ,但我想我遗漏了一些东西。

最佳答案

Iterable的情况下,是的,因为它没有任何采用 T 的方法, 只有返回 T 的方法(好吧,通过它的迭代器)。 编辑:见下文。

Java 没有关于协变类和逆变类的正式概念,这就是为什么它无法区分 Iterable<T> 的原因。和一个 List<T> (后者从 List<?> 转换为 List<Object>安全的)。由于它没有这种区别,因此它被迫警告您转换可能不安全。毕竟,不安全并不意味着事情崩溃,它只是意味着编译器不能保证它们不会

编辑: maaartinus 找到了一个很好的反例。仅当 Iterable 是不可变的时,以上内容才成立;但当然,不可变类型通常无论如何都是协变的(即使 Java 不承认这一点,因为它不承认不变性)。

关于java - 从 Iterable<?> 转换为 Iterable<Object> 总是安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19434186/

29 4 0