Sobes.tech
Middle

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:

  1. Kasutades TypeToken klassi või sarnaseid konstruktsioone: Genriklassi eksemplari loomisel saab edasi anda Class<T> objekti või kasutada anonüümset alamklass, et säilitada tüübi teavet.

  2. 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.