Come si può determinare il tipo di parametro utilizzato in una classe generica durante l'esecuzione?
sobes.tech AI
Risposta dell'AI
In Java, a causa dell'eliminazione dei tipi (type erasure) durante la compilazione, le informazioni sui tipi dei parametri generici non vengono conservate nel bytecode, quindi non è possibile determinarne direttamente il tipo a runtime.
Tuttavia, ci sono diversi modi per ottenere queste informazioni:
-
Usare la classe
TypeTokeno strutture simili: Quando si crea un'istanza di una classe generica, si può passare un oggettoClass<T>o usare una sottoclasse anonima per conservare le informazioni sul tipo. -
Riflettendo con
ParameterizedType: Se la classe generica conserva le informazioni sul tipo in un campo o costruttore, si può accedere tramite riflessione.
Esempio con passaggio di Class<T>:
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Tipo del parametro: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Stampa: Tipo del parametro: java.lang.String
Pertanto, per determinare il tipo del parametro a runtime, di solito è necessario passarne o conservarne esplicitamente le informazioni, poiché i meccanismi standard di Java non consentono di ottenerle a causa dell'eliminazione dei tipi.