为什么不能调用List< Number>不与List< Integer>即使Integer扩展数字? [英] Why is it not possible to call List<Number> not with List<Integer> even if Integer extends Number?

查看:112
本文介绍了为什么不能调用List< Number>不与List< Integer>即使Integer扩展数字?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道为什么无法调用 List< Number> 而不是 List< Integer > Integer是抽象类Number的扩展类?有一个逻辑错误,因为我可以使用Integer参数Number来调用Method。

  public class Que 
{

public void enterNumbers(List< Number> nummern)
{
for(Number number:nummern)
{
System.out.println(number +\\\
);


$ b $ public void enterNum(Number num)
{
System.out.println(This is a number+ num);


public static void main(String [] args)
{
Que que = new Que();

整数myInteger = new Integer(7);
//可能(当然!)
que.enterNum(myInteger);

列表<整数> num = new ArrayList< Integer>();
num.add(4);
num.add(45);
Integer inte = new Integer(333);

num.add(inte);
//不可能!
que.enterNumbers(num);




$ b $ p
$ b

为了解决这个问题,我可以使用 List<?> List< ;?扩展Number> ...所以我不需要解决方案我想知道确切的原因。



我能想到的唯一解决方案List与Number绑定为一种新的数据结构类型。

解决方案

因为您可以将 Number 不同子类的实例添加到 List< Number> 中,例如,类型为<$ c的对象$ c> 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 clash when add is called.

这篇关于为什么不能调用List&lt; Number&gt;不与List&lt; Integer&gt;即使Integer扩展数字?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆