Возможный дубликат:
Почему не вся информация о типах стирается в Java во время выполнения?
Дженерики Java реализуются посредством стирания типов, поэтому я думал, что невозможно получить какую-либо информацию о параметризованном типе во время выполнения. Однако я нашел следующий класс в библиотеке Джексона.
(Я немного упростил класс для этого примера)
public abstract class TypeReference<T> {
final Type _type;
protected TypeReference() {
Type superClass = getClass().getGenericSuperclass();
_type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
public Type getType() { return _type; }
}
Класс предоставляет доступ к своему параметризованному типу, как показано в следующем тесте:
void testTypeReference() {
// notice that we're instantiating an anonymous subclass of TypeReference
TypeReference<CurrencyDto> tr = new TypeReference<CurrencyDto>() {};
assert tr.getType() == CurrencyDto.class
}
Этот класс иллюстрирует, что фактические параметры типа могут быть получены во время выполнения (с использованием отражения), как это согласуется с представлением о том, что Java Generics реализуется посредством стирания типа?