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:
-
Gebruik maken van de klasse
TypeTokenof vergelijkbare constructies: Bij het maken van een instantie van een generieke klasse, kun je eenClass<T>object doorgeven of een anonieme subclass gebruiken om de type-informatie te behouden. -
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.