Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不能调用列表<;数量>;不使用列表<;整数>;即使整数扩展数字?_Java_Generics - Fatal编程技术网

Java 为什么不能调用列表<;数量>;不使用列表<;整数>;即使整数扩展数字?

Java 为什么不能调用列表<;数量>;不使用列表<;整数>;即使整数扩展数字?,java,generics,Java,Generics,我想知道为什么不能用List调用Listnot,即使Integer是抽象类号的扩展类?这是一个逻辑错误,因为我可以使用参数Number和Integer调用一个方法 public class Que { public void enterNumbers(List<Number> nummern) { for (Number number : nummern) { System.out.println(number + "\n"); } } p

我想知道为什么不能用
List调用
List
not,即使Integer是抽象类号的扩展类?这是一个逻辑错误,因为我可以使用参数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);
}
}
public class-Que
{
公共编号(列表编号)
{
用于(编号:nummern)
{
System.out.println(数字+“\n”);
}
}
公共无效enterNum(编号num)
{
System.out.println(“这是一个数字”+num);
}
公共静态void main(字符串[]args)
{
Que Que=新Que();
整数myInteger=新整数(7);
//可能(当然!)
que.enterNum(myInteger);
List num=new ArrayList();
添加数(4);
数量增加(45);
整数inte=新整数(333);
添加数(inte);
//不可能!
输入数字(num);
}
}

为了解决这个问题,我可以使用
List
List,因为您可以将
Number
的不同子类的实例添加到
List
,例如,类型为
Double
的对象,但显然不应该允许您将它们添加到
List

public void myMethod(列表){
增加(新的双(5.5));
}

如果允许您使用
List
的实例调用
myMethod
,则在调用
add
时会导致类型冲突。

泛型与数组不同。由于类型擦除,这是不允许的

考虑类别
车辆
自行车
汽车

如果你

public void addVehicle(List<Vehicle> vehicles){
    vehicles.add(new Car());
}
公共车辆(列出车辆){
车辆。添加(新车());
}
  • 这是可能的,因为
    车辆
    属于
    车辆
    类型,所以您可以添加
    汽车
    进入
    汽车
    ,因为它通过了IS-A测试
  • 但是如果允许它将
    列表
    传递给
    添加车辆(列表车辆)
    ,该怎么办
你应该在自行车列表中添加一辆
汽车。这显然是错误的。所以泛型不允许这种情况。


阅读

思考一下:
列表
您可以添加一个
<代码>列表
不能添加双精度
。因为泛型与数组不同,是协变的。请看更多细节。请看:我不明白为什么人们会把正确的答案写成评论,而这些评论不能被勾选为正确?!
public void addVehicle(List<Vehicle> vehicles){
    vehicles.add(new Car());
}