Java od wersji 1.5 obsługuje typy generyczne. Pozwalają one sparametryzować klasę, przez co nie ma konieczności dokonywania później kłopotliwego rzutowania. Sam zapis typu generycznego to duża litera/litery ujęta w nawiasy ostre. Utwórzmy prostą klasę
Pudelko przechowującą elementy dowolnego typu.
/**
* Wykorzystanie typów generycznych
* @author kodatnik.blogspot.com
*/
class Pudelko <T> {
// referencja do obiektu typu T
private T element;
// konstruktor klasy
public Pudelko(T element) {
this.element = element;
}
// metoda zwraca referencję do przechowywanego elementu
public T pobierzElement() {
return element;
}
}
Tworząc obiekt klasy
Pudelko musimy określić jakiego typu dane będą w nim przechowywane. Przykładowe wykorzystanie klasy
Pudelko.
public class TestPudelka {
public static void main(String args[]) {
// tworzymy trzy pudełka dla różnych typów danych (String, Integer oraz Double)
Pudelko<String> p1 = new Pudelko<String>("Ala ma kota");
Pudelko<Integer> p2 = new Pudelko<Integer>(12);
Pudelko<Double> p3 = new Pudelko<Double>(24.76);
// sprawdzamy zawartość każdego pudełka
System.out.println (p1.pobierzElement());
int wartosc = p2.pobierzElement() + 3;
System.out.println (wartosc);
System.out.println (p3.pobierzElement());
}
}
Wynik działania aplikacji (pudełko pierwsze przechowuje łańcuchy tekstowe, drugie liczby całkowite, a trzecie liczby rzeczywiste).
Ala ma kota
15
24.76
Większość klas dostarczanych z Javą wykorzystuje typy generyczne. Są to zazwyczaj klasy będące "pojemnikami" dla innych obiektów (tzw. kolekcje). Na przykład klasy
LinkedList,
Array,
Stack,
Vector,
TreeMap itp.
Typy generyczne przeznaczone są tylko do typów obiektowych, nie można ich użyć do typów prymitywnych.