【发布时间】:2013-08-29 14:39:31
【问题描述】:
我想知道为什么不能用 List<Integer 调用 List<Number> 甚至 Integer 是抽象类 Number 的扩展类?有一个逻辑错误,因为我可以用参数 Number 也用 Integer 调用 Method。
public class Que
{
public void enterNumbers(List<Number> nummern)
{
for (Number number : nummern)
{
System.out.println(number + "\n");
}
}
public void enterNum(Number num)
{
System.out.println("This is a number " + num);
}
public static void main(String[] args)
{
Que que = new Que();
Integer myInteger = new Integer(7);
// possible (of course!)
que.enterNum(myInteger);
List<Integer> num = new ArrayList<Integer>();
num.add(4);
num.add(45);
Integer inte = new Integer(333);
num.add(inte);
// not possible !
que.enterNumbers(num);
}
}
要解决它,我可以使用 List<?> 或 List<? extends Number>... 所以我不需要解决方案,我想知道确切的原因。
我能想到的唯一解决方案 List 是将 Number 绑定为一种新的数据结构类型。
【问题讨论】:
-
想一想:
List<Number>你可以加个Double。List<Integer>你不能添加Double。 -
因为泛型不像数组那样协变。有关更多详细信息,请参阅this question。
-
我不明白为什么人们将正确的答案写成不能被勾选为正确的 cmets?!