Konstruktory w typach sparametryzowanych

0

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.

0

Co tak naprawdę robi ten konstruktor?

Przypisuje wartość parametru o do pola ob.

Przy próbie skompilowania programu bez konstruktora otrzymuję wyjątek

Nie podałeś tu całego kodu, ale z błędu wynika, że próbujesz wywołać nieistniejący konstruktor. Jeśli chcesz stworzyć obiekt typu Gen<Integer> i przekazać do konstruktora wartość typu Integer, potrzebujesz konstruktora przyjmującego taką wartość, a tak się składa, że go usunąłeś.

Nie rozumiem, po co autor tworzy obiekt typu T, a następnie przypisuje jego referencję w konstruktorze.

A czego konkretnie w tym nie rozumiesz?

0

A gdyby tam nie było typu generycznego to nie miałbyś problemu? Dlaczego tak albo dlaczego nie?

0

Jak to co robi konstruktor, inicjalizuje obiekt tworzony...
Ja rozumiem że bywają początkujący ale bez k... przesady

0

Odpowiedź @Jaca777 rozwiała moje wątpliwości, dziękuję. Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1