我有一个界面
public interface FooBar<T> { }
我有一个实现它的类
public class BarFoo implements FooBar<Person> { }
通过反射,我想获取BarFoo的实例,并获取它实现的FooBar的版本为Person。
我使用BarFoo中的
.getInterfaces
返回FooBar,但这并不能帮助我找出T是什么。 最佳答案
您可以通过 Class#getGenericInterfaces()
获取类的通用接口(interface),然后依次检查它是否是 ParameterizedType
,然后相应地获取actual type arguments。
Type[] genericInterfaces = BarFoo.class.getGenericInterfaces();
for (Type genericInterface : genericInterfaces) {
if (genericInterface instanceof ParameterizedType) {
Type[] genericTypes = ((ParameterizedType) genericInterface).getActualTypeArguments();
for (Type genericType : genericTypes) {
System.out.println("Generic type: " + genericType);
}
}
}