– Kolejny świetny temat.
– Ile tych niespodzianek! Czy dziś są moje urodziny?
– Dzisiaj opowiem Ci o generykach. Generyki to typy, które mają parametr. W Javie klasy kontenera pozwalają Ci wskazać typ swych wewnętrznych obiektów.
– Kiedy deklarujemy zmienną generyczną, wskazujemy dwa typy zamiast jednego: typ zmiennej i typ przechowywanych przez nią danych.
– ArrayList to dobry przykład. Kiedy tworzymy nowy obiekt ArrayList, wygodnie jest wskazać typ wartości, które będą przechowywane wewnątrz tej listy.
Kod | Wyjaśnienie |
---|---|
|
Utwórz zmienną ArrayList o nazwie lista .Przypisz do niej obiekt ArrayList. W tym przypadku lista może przechowywać tylko obiekty typu String. |
|
Utwórz zmienną ArrayList o nazwie lista .Przypisz do niej obiekt ArrayList. W tym przypadku lista może przechowywać wszystkie wartości. |
|
Utwórz zmienną ArrayList o nazwie lista .Przypisz do niej obiekt ArrayList. W tym przypadku lista może przechowywać tylko wartości Integer i int (pol. liczb całkowitych). |
– To super interesujące. Szczególnie ta część o przechowywaniu wartości każdego typu.
– Dobrze to słyszeć. W rzeczywistości, jeśli umieścimy wartości typu String w ArrayList w jednej metodzie i oczekujemy, że będzie ona zawierała liczby z innej metody, to program się zawiesi (zakończy błędem).
– Rozumiem.
– Póki co nie będziemy tworzyć naszej własnej klasy z parametrami typu. Użyjemy po prostu tych już istniejących.
– Czy każda klasa może być parametrem typu, nawet taka, którą sam napiszę?
– Tak. Każdego typu oprócz typów prostych. Wszystkie parametry typu muszą dziedziczyć z klasy Obiekt.
– Masz na myśli, że nie mogę napisać ArrayList<int>?
– Dokładnie, nie możesz. Ale programiści Java napisali klasy osłonowe (opakowujące) dla każdego typu prostego. Te klasy dziedziczą/przejmują Obiekt. Wygląda to tak:
Typ prosty | Klasa | List |
---|---|---|
int | Integer | ArrayList<Integer> |
double | Double | ArrayList<Double> |
boolean | Boolean | ArrayList<Boolean> |
char | Character | ArrayList<Character> |
byte | Byte | ArrayList<Byte> |
– Bez problemu możesz przypisać do siebie klasy proste i te do nich analogiczne.
Przykłady |
---|
|
|
|
|
|
– Świetnie. Myślę, że będę teraz częściej używał ArrayList.
GO TO FULL VERSION