Sobes.tech
Middle

Hoe kan het type parameter dat in een generieke klasse wordt gebruikt, tijdens de uitvoering worden bepaald?

sobes.tech AI

Antwoord van AI

In Java, vanwege type erasure tijdens de compilatie, wordt informatie over de types van generieke parameters niet opgeslagen in de bytecode, dus het is niet mogelijk om het type van de parameter direct tijdens runtime te bepalen.

Er zijn echter verschillende manieren om deze informatie te verkrijgen:

  1. Gebruik maken van de klasse TypeToken of vergelijkbare constructies: Bij het maken van een instantie van een generieke klasse, kun je een Class<T> object doorgeven of een anonieme subclass gebruiken om de type-informatie te behouden.

  2. Reflectie met behulp van ParameterizedType: Als de generieke klasse de type-informatie opslaat in een veld of constructor, kun je deze via reflectie ophalen.

Voorbeeld met het doorgeven van Class<T>:

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

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

    public void printType() {
        System.out.println("Type van de parameter: " + type.getName());
    }
}

GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Output: Type van de parameter: java.lang.String

Dus, om het type van de parameter tijdens runtime te bepalen, is het meestal nodig om het expliciet door te geven of op te slaan, omdat de standaardmechanismen van Java dit niet toestaan vanwege type erasure.