java - 为什么不能调用 List<Number> 而不是 List<Integer> 即使 Integer 扩展了 Number?

标签 java generics

我想知道为什么不能调用 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/

相关文章:

java - 从 JAVA(MYSQL Insert 语句)和 delayed_jobs ruby​​ gem 处理的队列中手动输入延迟作业表

java - 为什么我无法捕获 TesseractException?

java - 使用Zxing库连续扫描二维码,无法打开相机

java - newSingleThreadExecutor 使线程保持值(android)

generics - 显式调用 java 中的默认方法 - 当实现的接口(interface)使用泛型时

c# - 如何在 C# 中实例化泛型方法?

java - 构造函数中的通用推理

Java Grect 和私有(private)静态错误

java - Java泛型中的 '&'和 ','有什么区别?

c# - 一旦我检查了它的类型,我可以将泛型传递给非泛型函数吗?