网上给出的答案大多是:

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