Budowa klasy z typem generycznym

0

Czesc

Mam kod:

/**
* 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;
}
} 

Wiem, ze znowu zanize poziom forum ale nie rozumiem do konca tego kodu.
Przy nazwie klasy dodaje duze T w nawiasach klamrowych i nie za bardzo wiem co w tej chwili sie dzieje - oc mi daje ten zabieg, jak to zmienia klase?
Potem przy konstruktorze (i deklarujac pole element) to "T", ktore dodalem przy nazwie klasy staje sie moim nowym typem np. zmiennych?

Rozumiem, ze ma mi to pozwolic na unikniecie pozniejszego rzutowania.

0

Ty nie zaniżasz poziomu tym pytaniem - tylko pokazujesz swoje lenistwo: https://docs.oracle.com/javase/tutorial/java/generics/

3

dobra, mam dzisiaj dobry dzień.

z tym T to tak naprawdę możesz zrobić co chcesz - to jest jakaś informacja dla Ciebie, powiedzmy że chcesz stworzyć sobie klasę która będzie przechowywać jakiś obiekt - jak będziesz to chciał zrobić bez generyków to masz problem, ale możemy:

To będzie przechowywać tylko Integery:

class IntegerHolder{

    private Integer integer;
    
    public IntegerHolder(Integer integer){
        this.integer = integer;
    }

    public Integer getInteger(){
        return integer;
    }
}

Ale jak będziesz chciał zrobić taki Holder dla String, Doubla, albo byle czego to du!a. Ale możesz użyć generyców:

class GenericHolder<T>{

    private T arg;

    public GenericHolder(T arg){
        this.arg = arg;
    }

    public T getArgument(){
        return arg;
    }
}

Możesz do GenericHolder'a wsadzić wszystko (tak wiem syntax-naziści, prymitywa nie mogę), np:

trzymać Int'a

        GenericHolder<Integer> integerHolder = new GenericHolder<Integer>(12);

ale mogę też String'a

GenericHolder<String> stringHolder = new GenericHolder<String>("dupa");
0

T Jest typem jaki wprowadzasz do klasy generics. Kurs pod tym katem jest istotny, sa tez po polsku. Warto pamietac : W fazie wykonania mamy tylko jedną klasę wszystkich instancji sparametryzowanych gdzie typem jest object(czyszczenie typu), skoro tak to metody statyczne sa wspolne dla wszystkich instancji , brak mozliwosci zmiany typu w trakcie wykonania, kazdy generowany obiekt moze byc innego typu

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