Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 1
  • 74

Odpowiedź (1)

  • 2

Zobaczmy, jakie byłyby konsekwencje, gdyby kod był prawidłowy.

Powyższy kod można byłoby zapisać w równoważny sposób:

List<String> ls = new ArrayList<String>(); // wiersz 1
List<Object> lo = ls;                      // wiersz 2

Wiersz 1 nie budzi zastrzeżeń. Przyjmijmy, że wiersz 2 też jest prawidłowy. Wówczas można byłoby napisać:

lo.add(new Object()); // wiersz 3
String s = ls.get(0); // wiersz 4

Kompilator nie zaprotestuje przy wierszu 3. Problem powstanie w wierszu 4 - pod indeksem 0 kryje się obiekt typu Object i próbujemy go wskazać poprzez referencję typu String.

Z tego powodu błąd kompilacji wystąpi w wierszu 2, a tym samym także w wierszu w pytaniu... Typ List<Object> nie jest nadtypem dla List<String>.

Nie oznacza to, że w przypadku typów generycznych wykluczony jest polimorfizm. Sposobem na jego wprowadzenie jest użycie typów z dzikimi kartami.

 

 

 

 

 

 

 

  • Odpowiedział
  • @ | 28.11.2015
  • TRENER MODERATOR ALTKOM AKADEMII