首页 > 代码库 > 获取泛型类型工具类

获取泛型类型工具类

Java泛型在编译阶段会进行泛型擦除,所以能够在运行期获得的泛型是在编译阶段已经确定(继承的泛型类)了的。

 1 public class GenricUtils { 2     /** 3      * 获得泛型类型 4      * @param clz 5      * @return 6      */ 7     public static <T> Class<T> getGenricClassType(Class clz){ 8         Type type = clz.getGenericSuperclass(); 9         if(type instanceof ParameterizedType){10             ParameterizedType pt = (ParameterizedType) type;11             Type[] types = pt.getActualTypeArguments();12             if(types.length > 0 && types[0] instanceof Class){13                 return (Class) types[0];14             }15         }16         return (Class) Object.class;17     }18 }

比如:

1 class TestA<T>{2     private Class<T> clz = GenricUtils.getGenricClassType(TestA.class);3     public  void get(String id){4         session.get(clz,id);5     }6 }7 class TestB extends TestA<String>{8 }

在执行:

System.out.println(getGenricClassType(TestA.class));System.out.println(getGenricClassType(TestB.class));

输出的结果分别为:

class java.lang.Objectclass java.lang.String

 

获取泛型类型工具类