假设我的项目中有以下类:
public class MyBaseEntity<T> {
T id;
}
public class MySubClass extends MyBaseEntity<Long> {
}
现在,我想用java反射得到MySubClass
的id
(java.lang.Long
)字段的主类型,我该怎么做?
更新
我把类改成了这个,并添加了两个新的Class
:
public class MySubClass3 extends MyBaseEntity<Integer> {
}
public class MySubClass2 extends MySubClass3 {
}
public class MySubClass extends MySubClass2 {
}
现在,我如何获得id的main类型,换句话说,如果继承的深度是动态的,我如何获取特定类的id
的main类型?
将类型传递给基类的构造函数
public MyBaseEntity(Class<?> clazz) {
this.clazz = clazz;
}
好吧,您可以在运行时定义哪个类用于MyBaseEntity
的T
参数,方法如下:
Type type = MySubClass.class.getGenericSuperclass();
if(type instanceof ParameterizedType) {
Type parameterType = ((ParameterizedType) type).getActualTypeArguments()[0];
if(parameterType instanceof Class) {
System.out.println(((Class<?>)parameterType).getName());
// prints java.lang.Long
}
}
但这是一种非常容易出错的方法。您可能有更棘手的继承或使用像class SubClass<T extends Number> extend MyBaseEntity<T>
这样的通配符,并且您将不得不专门处理这种情况。因此,我建议您使用@Reimeus建议的方法。