美文网首页
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获取范型参数类型

    JAVA中不能直接获取范型参数类型,如下: 实际开发中有可能出现需要根据List中范型参数类型(如strLists...

  • CoreJava笔记 - 范型程序设计(5)

    反射与范型 由于类型擦除,反射无法得到关于范型类型参数的信息。 范型的Class类在Java的反射库中,Class...

  • Java 泛型

    什么是泛型 Java 1.5 开始引进的参数性类型的,是在编译器进行类型擦除的类型转化,所以Java的泛型是伪范型...

  • java基础知识梳理&泛型初探

    目录 概述 范型的使用 类型参数 类型通配符 泛型方法 泛型类 限定类型参数上限 上界通配符(Upper Boun...

  • CoreJava笔记 - 范型程序设计(2)

    范型代码和Java虚拟机 关键知识:类型擦除Java的范型是编译器层次的范型,而在Java虚拟机上并没有范型类。在...

  • Java如何在运行时获取泛型的类型

    Java泛型是伪泛型,会在编译完成时进行类型的擦除,我们无法在运行时获取泛型参数的具体类型(类型擦除会被替换成泛型...

  • 获取范型参数

    1. field public class GenericTypeTest { public static voi...

  • java泛型

    java泛型 Java 泛型的参数只可以代表类,不能代表个别对象。 由于 Java 泛型的类型参数之实际类型在编译...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

网友评论

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

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