为什么不能调用List< Number>不与List< Integer>即使Integer扩展数字? [英] Why is it not possible to call List<Number> not with List<Integer> even if Integer extends Number?
问题描述
我想知道为什么无法调用 List< Number>
而不是
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> DoubleList< 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 withList<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<?>
orList<? 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
toList<Number>
, e.g., an object of typeDouble
, but obviously you shouldn't be allowed to add them toList<Integer>
:public void myMethod(List<Number> list) { list.add(new Double(5.5)); }
If you were allowed to call
myMethod
with an instance ofList<Integer>
this would result in a type clash whenadd
is called.这篇关于为什么不能调用List< Number>不与List< Integer>即使Integer扩展数字?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!