我有一个界面
public interface FooBar<T> { }
Run Code Online (Sandbox Code Playgroud)
我有一个实现它的类
public class BarFoo implements FooBar<Person> { }
通过反射,我想获取BarFoo的一个实例并得到它实现的FooBar版本是Person.
我使用.getInterfaces
BarFoo回到FooBar,但这并没有帮助我找出T是什么.
Bal*_*usC 35
您可以获取类的通用接口,Class#getGenericInterfaces()
然后依次检查它是否为a 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
尝试以下内容:
Class<T> thisClass = null;
Type type = getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] typeArguments = parameterizedType.getActualTypeArguments();
thisClass = (Class<T>) typeArguments[0];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17965 次 |
最近记录: |