Sobes.tech
Middle

Kaip galima nustatyti bendrojoje klasėje naudojamo parametro tipą vykdymo metu?

sobes.tech AI

Atsakymas iš AI

Java kalboje, dėl tipų ištrynimo (type erasure) kompilacijos metu, informacija apie generinių klasių parametrų tipus nėra saugoma baitkodo faile, todėl tiesiogiai nustatyti parametro tipą vykdymo metu nėra įmanoma.

Tačiau yra keletas būdų gauti šią informaciją:

  1. Naudoti TypeToken klasę arba panašias konstrukcijas: Kurdami generinės klasės egzempliorių, galite perduoti Class<T> objektą arba naudoti anonimines pogrupes, kad išsaugotumėte tipo informaciją.

  2. Refleksija naudojant ParameterizedType: Jei generinė klasė saugo tipo informaciją lauke ar konstruktoriuje, ją galima pasiekti per refleksiją.

Pavyzdys su Class<T> perdavimu:

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

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

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

GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Išves: Parametro tipas: java.lang.String

Taigi, norint nustatyti parametro tipą vykdymo metu, dažniausiai reikia jį perduoti arba aiškiai išsaugoti, nes standartiniai Java mechanizmai to neleidžia dėl tipų ištrynimo.