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