我按如下方式声明一个类:
public class SomeClass extends AdditionalClass<GenericClass> {
...
}
此...
SomeClass object = new SomeClass();
System.out.println(object.getSuperClass().getSimpleName());
... yield&#34; AdditionalClass&#34;。什么方法调用或调用将允许我询问该对象并获得&#34; GenericClass&#34;结果呢?
答案 0 :(得分:14)
你必须获取超类的ParameterizedType
(s)数组。例如:
SomeClass object = new SomeClass();
Type parameterizedClassType =
((ParameterizedType) object.getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
System.out.println(parameterizedClassType.getTypeName());
这应该打印com.whateverpackage.GenericClass
。
请注意,即使在编译SomeClass
时发生类型擦除,也会保留有关超类的类型参数信息,因为它们是类的定义的 part 。
但是,如果SomeClass
是通用的(即类似SomeClass<X> extends AdditionalClass<GenericClass>
),则对于所有SomeClass
个实例,type-parameter(即<X>
)将已被某些实际类型替换,不会成为.getActualTypeParameters()
数组的一部分。