Wpis z mikrobloga

jak to z tymi genericami jest?
próbowałem się pobawić z typami obiektów i w obu przypadkach wywala mi błąd.
List objectList = new ArrayList();
oraz tutaj
List objectList = new ArrayList();

pierwsze wydawało mi się sensowne, ale wywala błąd, dlaczego? Long jest również typu Number, powinno się castować przecież.

#java
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Inconsistent: no musi być wtedy:

List extends Number list = new ArrayList();
można nawet
List super Long list = new ArrayList();
(swoją drogą od javy 7 nie musisz podawać generic type po prawej stronie, wystraczy new ArrayList<>() - jednak same nawiasy <>
  • Odpowiedz
List extends Number list = new ArrayList();


@GotoFinal: a tak i zapis to nie jest trochę "obejście" tego? ( ͡° ͜ʖ ͡°) bo niby genericy definiowane są w tym przypadku w interface, który definiuje to jako konkretną klasę, a tutaj jest to obchodzone.
  • Odpowiedz
@Inconsistent: nie, nie ma żadnego obchodzenia, genericsy zdefiniowane w klasie zawsze wskazują na jakiś konkretny typ:
class MojaKlasa to tylko skrót od class MojaKlasa i to zawsze wskazuje typ E, po kompilacji każde pole w klasie o type E, będzie o typie tego po extends w definicji klasy, czyli tutaj - Object.
Pamiętaj że genercisy w javie nie są brane pod uwagę w runtime, można się uprzeć i mieć List w którym są
  • Odpowiedz