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:
-
Izmantot
TypeTokenklasi vai līdzīgas konstrukcijas: Izveidojot ģeneriskās klases instanci, var nodotClass<T>objektu vai izmantot anonīmu apakšklasi, lai saglabātu informāciju par tipu. -
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ēļ.