Sobes.tech
Middle

Ako určiť typ parametra používaného v generickej triede počas behu programu?

sobes.tech AI

Odpoveď od AI

V Jave, kvôli vymazaniu typov (type erasure) počas kompilácie, informácie o typoch generických tried sa neuchovávajú v bajtkóde, takže nie je možné priamo určiť typ parametra počas behu.

Existuje však niekoľko spôsobov, ako tieto informácie získať:

  1. Použitie triedy TypeToken alebo podobných konštrukcií: Pri vytváraní inštancie generickej triedy môžete odovzdať objekt Class<T> alebo použiť anonymnú podtriedu na zachovanie informácie o type.

  2. Reflexia pomocou ParameterizedType: Ak generická trieda uchováva informácie o type v poli alebo konštruktore, je možné ich získať pomocou reflexie.

Príklad s odovzdaním Class<T>:

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

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

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

GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Vypíše: Typ parametra: java.lang.String

Preto je zvyčajne potrebné, aby ste typ parametra pri behu explicitne odovzdali alebo ho uložili, pretože štandardné mechanizmy Javy to neumožňujú kvôli vymazaniu typov.