美文网首页
java获取范型参数类型

java获取范型参数类型

作者: sunger | 来源:发表于2016-04-13 23:05 被阅读362次

    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());
      
    

    相关文章

      网友评论

          本文标题:java获取范型参数类型

          本文链接:https://www.haomeiwen.com/subject/kskglttx.html