Ich frage mich, warum ist es nicht möglich, List<Number>
nicht mit List<Integer
> gerade Integer ist eine erweiterte Klasse der abstrakten Klasse Nummer? Es gibt einen logischen Fehler, da ich eine Methode mit dem Parameter Number auch mit Integer aufrufen könnte.Warum ist es nicht möglich, die Liste <Number> nicht mit der Liste <Integer> aufzurufen, auch wenn Integer die Nummer erweitert?
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);
}
}
es zu lösen ich mit List<?>
oder List<? extends Number>
... arbeiten konnte so brauche ich nicht die Lösung, die ich den genauen Grund wissen will.
Die einzige Lösung, die ich an List denken könnte, ist die Bindung mit Number als neue Art von Datenstruktur.
http://docs.oracle.com/javase/tutorial/java/generics/inheritance.html Lesen – kosa
Denken Sie daran: 'Liste' Sie eine 'Double' hinzufügen können. 'List ' Sie können kein 'Double' hinzufügen. –
Da Generika nicht kovariant wie Arrays sind. Weitere Details finden Sie unter [** diese Frage **] (http://stackoverflow.com/q/17384083/1348195). –