为什么我收到此警告消息,无法将数字转换为整数。
List<Number> list1 = null;
List<Integer> list2 = null;
list2 = list1;// warning Type mismatch: cannot convert from List<Number> to List<Integer>.
答案 0 :(得分:5)
答案 1 :(得分:2)
Java泛型是不变的。
List<String>
不能分配给List<Object>
类型的引用。与您从String
到Object
甚至从String[]
到Object[]
的正常参考分配所期望的不同(使数组“协变”是一个错误)。相反,使用上限,如下所示:
List<? extends Number> numbers = null;
List<Integer> integers = null;
numbers = integers; // <-- Okay!
答案 2 :(得分:1)
泛型有点奇怪
List<SuperType>
实际上不是
的超类型List<SubType>
e.g。 List<Number>
不是List<Integer>
的超类型。 (即Java的泛型是不变的,而不是像Java的数组那样的协变)。这是因为如果这种关系持有你可以用List<Number>
代替List<Integer>
,那么如果你不进行替换就会允许那些非法的操作。
更具体地说,如果Java的泛型像数组一样是协变的,你可以这样做:
List<Number> list = new ArrayList<Integer>();
然后你可以输入一个Double into列表,因为对于编译器,list是一个ArrayList!正如您所看到的,这打破了泛型应该提供的保证(即,您应该只能将Integer
个对象放入list
),因此不允许这样做。
因此,您无法将List<Number>
分配给List<Integer>
。事实上,即使仿制品在没有铸造的情况下是协变的,我也不认为你能做到这一点......