如何获得通用接口的具体类型

我有一个界面

public interface FooBar { } 

我有一个实现它的类

public class BarFoo implements FooBar { }

通过reflection,我想获取BarFoo的一个实例并得到它实现的FooBar版本是Person。

我使用.getInterfaces的.getInterfaces来回到FooBar,但这并没有帮助我找出T是什么。

您可以通过Class#getGenericInterfaces()获取类的generics接口,然后依次检查它是否为ParameterizedType ,然后相应地获取实际的类型参数 。

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

尝试以下内容:

 Class thisClass = null; Type type = getClass().getGenericSuperclass(); if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) type; Type[] typeArguments = parameterizedType.getActualTypeArguments(); thisClass = (Class) typeArguments[0]; }