Niezrozumiałe porównywanie typów generycznych

0

Cześć,
Proste pytanie, dlaczego poniższy kod nie zadziała? A dokładniej czemu metoda addAll() nie pozwala mi dodać zmiennej numbers do newList skoro typy są identyczne?

static public List<? extends Number> add(List<? extends Number> numbers) {
    List<? extends Number> newList = new ArrayList<>();
    newList.addAll(numbers);

    return newList;
}
1

Dodajesz elementy do listy newList2, a nie do newList. Nie wiemy jakiego typy elementy przyjmuje lista newList2.

4
Kuba Leman napisał(a):

Cześć,
Proste pytanie, dlaczego poniższy kod nie zadziała? A dokładniej czemu metoda addAll() nie pozwala mi dodać zmiennej numbers do newList skoro typy są identyczne?

Nie możesz tego zrobić, bo to mogłoby doprowadzić do naruszenia typów generycznych

List<? extends Number> listOfDoubles = new ArrayList<Double>();
List<? extends Number> listOfIntegers = new ArrayList<Integer>();

listOfDoubles.addAll(listOfIntegers);

Gdyby udało Ci się dodać listOfDoubles do listOfIntegers to miałbyś listę List<Integer> w której jest Double.

0
Pinek napisał(a):

Dodajesz elementy do listy newList2, a nie do newList. Nie wiemy jakiego typy elementy przyjmuje lista newList2.

Literówka w kodzie, wszędzie jest newList bez 2

Riddle napisał(a):
Kuba Leman napisał(a):

Cześć,
Proste pytanie, dlaczego poniższy kod nie zadziała? A dokładniej czemu metoda addAll() nie pozwala mi dodać zmiennej numbers do newList skoro typy są identyczne?

Nie możesz tego zrobić, bo to mogłoby doprowadzić do naruszenia typów generycznych

List<? extends Number> listOfDoubles = new ArrayList<Double>();
List<? extends Number> listOfIntegers = new ArrayList<Integer>();

listOfDoubles.addAll(listOfIntegers);

Gdyby udało Ci się dodać listOfDoubles do listOfIntegers to miałbyś listę List<Integer> w której jest Double.

Mega odpowiedź, dziękuję bardzo! Dopiero wchodze w Jave i wydawało się to dla mnie zagadkowe

1 użytkowników online, w tym zalogowanych: 0, gości: 1