我想知道为什么不能调用 List<Number>
不与 List<Integer
> 甚至 Integer 是抽象类 Number 的扩展类?有一个逻辑错误,因为我可以用参数 Number 也用 Integer 调用方法。
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 绑定(bind)为一种新的数据结构类型。
最佳答案
因为你可以,例如添加 Number
的不同子类的实例至 List<Number>
,例如 Double
类型的对象, 但显然你不应该被允许将它们添加到 List<Integer>
:
public void myMethod(List<Number> list) {
list.add(new Double(5.5));
}
如果允许您调用 myMethod
使用 List<Integer>
的实例当 add
时,这将导致类型冲突被称为。
关于java - 为什么不能调用 List<Number> 而不是 List<Integer> 即使 Integer 扩展了 Number?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18513990/