Sobes.tech
Middle

Kako odrediti tip parametra koji se koristi u generičkoj klasi tokom izvršavanja programa?

sobes.tech АИ

Одговор од АИ

U Javi, zbog brisanja tipova (type erasure) tokom kompilacije, informacije o tipovima generičkih klasa ne ostaju sačuvane u bajt kodu, pa nije moguće direktno odrediti tip parametra u toku izvršavanja.

Međutim, postoji nekoliko načina da se ove informacije dobiju:

  1. Korišćenje klase TypeToken ili sličnih konstrukcija: Prilikom kreiranja instance generičke klase, može se proslediti objekat Class<T> ili koristiti anonimnu podklasu za očuvanje informacije o tipu.

  2. Refleksija pomoću ParameterizedType: Ako generička klasa čuva informaciju o tipu u polju ili konstruktoru, može se pristupiti putem refleksije.

Primer sa prosleđivanjem Class<T>:

public class GenericClass<T> {
    private Class<T> type;

    public GenericClass(Class<T> type) {
        this.type = type;
    }

    public void printType() {
        System.out.println("Tip parametra: " + type.getName());
    }
}

GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Ispisaće: Tip parametra: java.lang.String

Dakle, da biste odredili tip parametra u toku izvršavanja, obično je potrebno da ga eksplicitno prosledite ili sačuvate, jer standardni mehanizmi Jave to ne omogućavaju zbog brisanja tipova.