(ParameterizedType) getClass().getGenericSuperclass().getActualTypeArguments()[0]得到的是什么?
这种写法一般都会在基类中看到,而且是使用了JAVA泛型的,比如我们J2EE中的BaseDAO什么的,请看代码,其实简写了,分开写就明了了。
基类
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public abstract class SuperClass<T> { private Class<T> beanClass; @SuppressWarnings("unchecked") public SuperClass() { super(); ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass(); Type[] types = parameterizedType.getActualTypeArguments(); beanClass = (Class<T>) types[0]; } public Class<T> getBeanClass() { return beanClass; } public void setBeanClass(Class<T> beanClass) { this.beanClass = beanClass; } public static void main(String[] args) { SuperClass<Cat> superClass = new SubClass(); System.out.println(superClass.getBeanClass()); } }
子类
public class SubClass extends SuperClass<Cat> { public SubClass() { super(); } } class Cat { public Cat() { super(); } }
运行SuperClass后控制台会打印:
class com.stos.test.generic.Cat
看到运行结果你可能就清楚了,就是获取实际的泛型类。