在以下作业中,我需要使用List<? extends Number>
:
List<? extends Number> list = Arrays.asList(1.2, 3, 4.5);
虽然Arrays.asList(1.2, 3, 4.3)
的类型为List<Number & Comparable<?>>
,但考虑List
java中的genertic类型是不变的,而使用通配符?
,它可以变为逆变。因此,如果它是逆变的,Number & Comparable<?>
是Number
的子类型,那么List<Number & Comparable<?>>
是List<? extends Number>
的超类型。那么这是不正确的,因为它将超类型分配给子类型(向下转换)!
我的理解在哪里错了?
答案 0 :(得分:0)
它不起作用。如果打开编译器警告,您将看到编译器正在抗议正在执行未经检查的转换。编译器告诉你,它无法在编译时验证你推断的强制转换是否正确。