网上给出的答案大多是:
protected Class<T> getModelName() {
Type t = getClass().getGenericSuperclass();
ParameterizedType p = (ParameterizedType) t ;
Class<T> c = (Class<T>) p.getActualTypeArguments()[0];
return c;
}
但是遇到Cglib代理会继续继承子类,需要判断并继续取父类,并获取泛型:
// 父类
public abstract class BaseClass<T>{
protected Class<T> getModelName() {
Type t = getClass().getGenericSuperclass();
// Cglib代理可能会继承子类,需要取父类名称
if(!(t instanceof ParameterizedType)){
t = getClass().getSuperclass().getGenericSuperclass();
}
ParameterizedType p = (ParameterizedType) t ;
Class<T> c = (Class<T>) p.getActualTypeArguments()[0];
return c;
}
...
}
全部评论