java获取范型参数类型

2016-04-13  本文已影响362人  sunger

JAVA中不能直接获取范型参数类型,
如下:

List<String> strLists=new ArrayList<String>();
List<Integer> intLists=new ArrayList<Integer>();

实际开发中有可能出现需要根据List中范型参数类型(如strLists和intLists中范型参数类型分别为 String 和Integer)。

简而言之就是获取List<T> 中T的类型,根据不同的类型做相应的处理。
搜索了不少资料,然而并没有什么发现多少清晰的思路,一般就是用反射。

在安卓领域把反射用的出神入化的首先就是我们所熟知的Gson(当然还有eventbus,green dao等),Gson支持范型集合等解析。
庆幸Gson源码中有一个获取范型参数类型方法,实现原理也是用反射

$Gson$Types

于是抽出一个工具类:

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import com.google.gson.internal.$Gson$Types;

public  class ClassTypeUtils {

    public  static Type getSuperTypeParameter(Class<?> subclass)    {
        Type superclass = subclass.getGenericSuperclass();
        if (superclass instanceof Class) {
            throw new RuntimeException("Missing type parameter.");
        }
        ParameterizedType parameterized = (ParameterizedType) superclass;
        return $Gson$Types
        .canonicalize(parameterized.getActualTypeArguments()[0]);
    }
}
  

使用方法如下:

List<String> strLists=new ArrayList<String>();
Type type=ClassTypeUtils.getSuperTypeParameter(strLists.getClass());
  
上一篇 下一篇

猜你喜欢

热点阅读