且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

为什么不能调用List< Number>不与List< Integer>即使Integer扩展数字?

更新时间:2023-11-11 22:22:22

因为您可以将 Number 不同子类的实例添加到 List< Number> 中,例如,类型为 Double

,但显然你不应该被允许将它们添加到 List< Integer>
  public void myMethod(List< Number> list){
list.add(new Double(5.5));

$ / code>

如果您可以调用 myMethod > List< Integer> 这会在调用 add 时导致类型冲突。

I was wondering why is it not possible to call List<Number> not with List<Integer> even Integer is an extended class of the abstract class Number ? There is a logical error as I could call a Method with the parameter Number also with 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);
}
}

To solve it I could work with List<?> or List<? extends Number>... so I don't need the solution I want to know the exact reason.

The only solution I could think of List is bind with Number as a new Type of Data Structure.

Because you could e.g. add an instance of a different subclass of Number to List<Number>, e.g., an object of type Double, but obviously you shouldn't be allowed to add them to List<Integer>:

public void myMethod(List<Number> list) {
    list.add(new Double(5.5));
}

If you were allowed to call myMethod with an instance of List<Integer> this would result in a type *** when add is called.