在编写通用性框架的时候,最顶层的类中一般在编译时是无法获得具体的类型的,因此,我们要使用泛型,使应用程序在运行时获得泛型的具体类型。
具体实现如下:
最顶层的类:
public class BaseClass<T, M>
{
public Class<T> getEntityClass()
{
ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
Class<T> result = (Class<T>) (parameterizedType.getActualTypeArguments()[0]);// 0表示获得第一个泛型的具体类型
return result;
}
}
子类:
public class SubClass extends BaseClass<String, Integer>
{
}
测试:
public class Test
{
public static void main(String[] args)
{
SubClass base = new SubClass();
System.out.println(base.getEntityClass().getName());// 输出泛型的实际类型
}
}