我有一个界面

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);
        }
    }
}

10-07 16:34