获取泛型类型工具类

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.Object
class java.lang.String

 

posted @ 2014-11-18 17:56  礼拜天001  阅读(576)  评论(0编辑  收藏  举报