Ответ 1
Вы должны получить массив ParameterizedType
(s) суперкласса. Например:
SomeClass object = new SomeClass();
Type parameterizedClassType =
((ParameterizedType) object.getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
System.out.println(parameterizedClassType.getTypeName());
Это должно печатать com.whateverpackage.GenericClass
.
Обратите внимание, что даже стирание типа происходит, когда SomeClass
скомпилирован, информация о параметрах типа о суперклассе (es) сохраняется, поскольку они являются частью определения класса.
Однако, если SomeClass
был общим (т.е. был чем-то вроде SomeClass<X> extends AdditionalClass<GenericClass>
), то для всех экземпляров SomeClass
параметр типа (т.е. <X>
) был бы заменен некоторым фактическим типом, который не будет включен в массив .getActualTypeParameters()
.