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());
}