Typy generyczne

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.


7 Komentarzy - Typy generyczne

Anonimowy pisze...

Krótko i na temat :)

Super wpis :)

Pozdrawiam :)

Anonimowy pisze...

pozdrawiam serdecznie i składam najserdeczniejsze podziekowania.

Łukasz W. pisze...

Konkretnie - dobrze, dzięki.
Myślę, że warto również wspomnięc o samym zapisie informującym o wystąpieniu typu generycznego.
Ogólnie praktycznie wszystko co jest poprawnym składniowo identyfikatorem z punktu widzenia javy może znaleźć się pomiędzy "<>". Przy czym warto moim zdaniem trzymać się pewnych konwencji które uczynią kod bardziej czytelnym.
I tak zapis (E - Element) informuje że klasa jest kolekcją zawierającą elementy () określonego typu.
Inną powszechnie stosowaną konwencją jest (T - typ) która mówi o typie, czyli czymś co nie jest elementem kolekcji.
Dla przytoczonego przykładu lepiej by było skorzystać z zapisu class Pudelko , co dodatkowo wnosi informację o klasie NIE BĘDĄCEJ listą i operującej na dowolnym typie.

Devon pisze...

@Łukasz: Masz całkowitą rację, poprawiłem. Gwoli wyjaśnienia jako identyfikatory typów generycznych wykorzystuje się zazwyczaj litery:

E - element (głównie w kolekcjach)
K - klucz
N - liczba
T - typ
V - wartość
S,U,V itd. - kolejne typy

Anonimowy pisze...

Prosto i na temat. Brawo.

Piotr pisze...

Oj, przydało się na programowanie, dzięki za konkretne wyjaśnienie na przykładach :)

Anonimowy pisze...

Super, wielkie dzięki :D
Klasy Vector się już nie używa ;D.

Prześlij komentarz

Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)

Popularne posty