Sobes.tech
Middle

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:

  1. Usare la classe TypeToken o strutture simili: Quando si crea un'istanza di una classe generica, si può passare un oggetto Class<T> o usare una sottoclasse anonima per conservare le informazioni sul tipo.

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