Как може да се определи типът на параметъра, използван в обобщен клас, по време на изпълнение?
sobes.tech AI
Отговор от AI
В Java, поради изтриването на типове (type erasure) по време на компилация, информацията за типовете на параметрите на генеричните класове не се запазва в байткода, така че не е възможно директно да се определи типът на параметъра по време на изпълнение.
Въпреки това, има няколко начина да получите тази информация:
-
Използване на класа
TypeTokenили подобни конструкции: При създаване на екземпляр на генеричен клас, може да се предаде обектClass<T>или да се използва анонимен подклас, за да се запази информацията за типа. -
Рефлексия с използване на
ParameterizedType: Ако генеричният клас запазва информация за типа в поле или конструктор, тя може да бъде получена чрез рефлексия.
Пример с предаване на 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.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Ще изведе: Тип на параметъра: java.lang.String
Затова, за да определите типа на параметъра по време на изпълнение, обикновено е необходимо да го предадете или запазите явно, тъй като стандартните механизми на Java не позволяват да се получи поради изтриването на типове.