Kuidas määrata genereeritud klassis kasutatava parameetri tüüp jooksvalt?
sobes.tech AI
Vastus AI-lt
Java keeles, kuna tüübi kustutamine (type erasure) kompileerimise ajal, ei säilita teavet genriklasside parameetritüüpide kohta baitkoodis, seetõttu ei ole võimalik otseselt määrata parameetri tüüpi jooksvalt.
Siiski on mitu viisi, kuidas seda teavet saada:
-
Kasutades
TypeTokenklassi või sarnaseid konstruktsioone: Genriklassi eksemplari loomisel saab edasi andaClass<T>objekti või kasutada anonüümset alamklass, et säilitada tüübi teavet. -
Refleksiooni kasutades
ParameterizedType: Kui genriklass salvestab tüübi teavet väljal või konstruktoris, saab selle refleksiooni abil kätte saada.
Näide Class<T> edasiandmisega:
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Parameetri tüüp: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Väljund: Parameetri tüüp: java.lang.String
Seega, parameetri tüübi määramiseks jooksvalt on tavaliselt vaja seda otseselt edasi anda või salvestada, kuna Java standardmehhanismid ei võimalda seda tüübi kustutamise tõttu otse saada.