Witam!
Jest to pierwszy pościk na tym forum, które swoją drogą przeglądam nie od dziś, lecz wreszcie miałem powód, aby konto założyć.
Uczę się Javy z książki Herberta Schildta i mam problem w rozdziale o typach sparametryzowanych.
Kod, który przedstawiam poniżej jest przykładem z książki i mam problem z jego zrozumieniem.
public class Gen<T> {
T ob;
// Przekazanie konstruktorowi referencji
// do obiektu typu T
public Gen(T o) {
ob = o;
}
T getob(){
return ob;
}
void showType(){
System.out.println("Typ T to " + ob.getClass().getName());
System.out.println("Hashcode " + ob.hashCode());
}
Nie rozumiem, po co autor tworzy obiekt typu T, a następnie przypisuje jego referencję w konstruktorze. Co więcej, ukazany wyżej przykład nie jest wyjątkiem. Autor sam na temat konstruktora pisze:
- Oto konstruktor klasy.*
public Gen(T o) {
ob = o;
}
*Łatwo zauważyć, że parametr o
jest egzemplarzem typu T. Podobnie jak wcześniej oznacza to, iż rzeczywisty typ o
będzie typem przekazanym do T w momencie tworzenia obiektu Gen
. Przypisanie ob
do o
jest poprawne, ponieważ obie zmienne reprezentują egzemplarze tego samego typu T (wskazanego podczas tworzenia obiektu klasy Gen
). *
Przy próbie skompilowania programu bez konstruktora otrzymuję wyjątek:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The constructor Gen<Integer>(int) is undefined
The constructor Gen<String>(String) is undefined
Co tak naprawdę robi ten konstruktor?
P.S. Przepraszam, jeżeli nie ten dział, duplikat, etc.