java获取范型参数类型

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

List strLists=new ArrayList();
List intLists=new ArrayList();

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

简而言之就是获取List 中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 strLists=new ArrayList();
Type type=ClassTypeUtils.getSuperTypeParameter(strLists.getClass());
  

你可能感兴趣的:(java获取范型参数类型)