如何获得通用接口的具体类型
我有一个界面
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]; }