Zastanawiam się, dlaczego nie można wywołać List<Number>
nie z List<Integer
> nawet Integer jest rozszerzoną klasą abstrakcyjnego numeru klasy? Wystąpił błąd logiczny, ponieważ mógłbym wywołać metodę z parametrem Number również z liczbą całkowitą.Dlaczego nie można wywołać listy <Number> nie z listą <Integer>, nawet jeśli liczba całkowita rozszerza numer?
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);
}
}
go rozwiązać mogłem pracować z List<?>
lub List<? extends Number>
... więc nie muszę rozwiązanie Chcę poznać dokładną przyczynę.
Jedynym rozwiązaniem, które mógłbym wymyślić List, jest powiązanie z Number jako nowy typ struktury danych.
http://docs.oracle.com/javase/tutorial/java/generics/inheritance.html – kosa
Pomyślcie o tym: '' Lista można dodać 'Double'. 'List ' nie można dodać 'Double'. –
Ponieważ generics nie są kowariantne jak tablice. Zobacz [** to pytanie **] (http://stackoverflow.com/q/17384083/1348195) na więcej szczegółów. –