返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type,然后将其转换ParameterizedType。 getActualTypeArguments() 返回表示此类型实际类型参数的 Type 对象的数组。[0]就是这个数组中第一个了。简而言之就是获得超类的泛型参数的实际类型。 看意思可能不是很懂,我们直接看例子
package com.chen.demo; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; classparam<T1, T2> { classA{} classBextendsA{} private Class<T1> entityClass; publicparam(){ Type type = getClass().getGenericSuperclass(); System.out.println(“getClass() == ” + getClass()); System.out.println(“type = ” + type); Type trueType = ((ParameterizedType)type).getActualTypeArguments()[0]; System.out.println(“trueType1 = ” + trueType); trueType = ((ParameterizedType)type).getActualTypeArguments()[1]; System.out.println(“trueType2 = ” + trueType); this.entityClass = (Class<T1>)trueType; System.out.println(“entityClass = ” + entityClass); B t = new B(); type = t.getClass().getGenericSuperclass(); System.out.println(“B is A’s super class :” + ((ParameterizedType)type).getActualTypeArguments().length); } } publicclassClassDemoextendsparam<MyClass, MyInvoke>{ publicstaticvoidmain(String[] args){ ClassDemo classDemo = new ClassDemo(); } } package com.chen.demo; publicclassMyClass{ } package com.chen.demo; publicclassMyInvoke{ }
我们再看打印结果
1 2 3 4 5 6
getClass() == classcom.chen.demo.ClassDemo type= com.chen.demo.param<com.chen.demo.MyClass, com.chen.demo.MyInvoke> trueType1 = classcom.chen.demo.MyClass trueType2= classcom.chen.demo.MyInvoke entityClass= classcom.chen.demo.MyInvoke B is A’s super class :0