Sobes.tech
Middle

Kā noteikt parametrā, kas tiek izmantots ģeneriskajā klasē, tipu izpildes laikā?

sobes.tech AI

Atbilde no AI

Java valodā, sakarā ar tipu izdzēšanu (type erasure) kompilācijas laikā, informācija par ģenerisko klases parametru tipiem netiek saglabāta bajtkodā, tāpēc tieši noteikt parametra tipu izpildes laikā nav iespējams.

Tomēr ir vairāki veidi, kā iegūt šo informāciju:

  1. Izmantot TypeToken klasi vai līdzīgas konstrukcijas: Izveidojot ģeneriskās klases instanci, var nodot Class<T> objektu vai izmantot anonīmu apakšklasi, lai saglabātu informāciju par tipu.

  2. Refleksija, izmantojot ParameterizedType: Ja ģeneriskā klase saglabā informāciju par tipu laukā vai konstruktorā, to var piekļūt ar refleksiju.

Piemērs ar Class<T> nodošanu:

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

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

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

GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Izvadīs: Parametra tips: java.lang.String

Tādēļ, lai noteiktu parametra tipu izpildes laikā, parasti ir nepieciešams to tieši nodot vai saglabāt, jo standarta Java mehānismi to neļauj izdarīt tipu izdzēšanas dēļ.