如果泛型支持子类型,哪种类型安全会丢失?
考虑以下代码段:
Number[] numbers = {1, 2.3, 4.5f, 6000000000000000000L};
做上面是完全可以的,是一个抽象类。Number
继续前进,
List<Long> listLong = new ArrayList<Long>();
listLong.add(Long.valueOf(10));
List<Number> listNumbers = listLong; // compiler error - LINE 3
listNumbers.add(Double.valueOf(1.23));
如果第 3 行被设计为成功编译,我们最终会得到 a of s,即List
Number
for(Number num: listNumbers ){
System.out.println(num);
}
// 10
// 1.23
这些都是数字。
我在一本书中发现了这一点,
泛型不支持子类型,因为它会导致在实现类型安全方面出现问题。这就是为什么不被认为是哪里是超类型的子类型
List<T>
List<S>
S
T
如果第 3 行成功编译,那么在上述特定情况下,哪种类型安全会丢失?