在我们搭建框架中往往会用到泛型,我们知道泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,代码的重用率高

然而有时候<method>的入参并不能直接强制转换成泛型的类型,比如说下面这段代码: 
 
很明显String 类型不能强制转换成<T> 
那我们会需要用到FastJson或者GSON这种类型转换工具进行类型的转换工作 
但FastJson和Gson 内方法是这样的:

public static <T> T parseObject(String text, Class<T> clazz) {return parseObject(text, clazz, new Feature[0]);}
  • 1
  • 2
  • 3

Class<T> clazz 是显式的类型。 直接使用的话会报错: 
 
不能直接使用<T>,那么我们需要获取到<T>Class<T> clazz; 
下面是获取泛型<T>Class<T> clazz两种方法:

  • 一种是使用反射类reflect
   Class<? super T> rawType;rawType = (Class <T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  • 1
  • 2

getActualTypeArguments()[0]中 ‘0’ 代表的是第一个泛型类型。

  • 第二种采用Gson来获取
Class<? super T> rawType;public BaseCallback() {this.mType = getSuperclassTypeParameter(getClass());this.rawType = (Class<? super T>) $Gson$Types.getRawType(mType);}static Type getSuperclassTypeParameter(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]);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Class<? super T> rawType就是我们泛型<T>的数据类型Class<T> clazz

获取泛型T的ClassT clazz相关推荐

  1. java 泛型反射_Java使用反射来获取泛型信息示例

    本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...

  2. Java获取泛型T的类型 T.class

    import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type;public class Main{public s ...

  3. [转载] Java获取泛型T的类型 T.class

    参考链接: Java中的抽象 import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public cla ...

  4. java获取泛型的类型_Java反射获取泛型类型

    public class Person{ }importjava.lang.reflect.ParameterizedType;importjava.lang.reflect.Type;public ...

  5. 【转】Java获取泛型T的具体类型

    在日常的开发中特别是框架的设计或者实用反射的时候,经常会实用class类去做一些事情,但是由于系统的抽象等问题,经常实用泛型去做一些事情.所以如何在泛型中获取具体的class类呢? 解决方案:父类本身 ...

  6. java 获取泛型的type,如何获取泛型的Type类型

    开发中很多时候都遇到或使用到泛型.例如在json转换成bean对象或其他对象,而对象中存在泛型,这时候需要用到TypeToken. Type:是java里的 java.lang.reflect.Typ ...

  7. Java通过Class的对象来获取泛型的class示例

    转载自  Java通过Class的对象来获取泛型的class示例 在使用spring的JdbcTemplate实现DAO的时候,经常会用到一个类ParameterizedBeanPropertyRow ...

  8. 泛型系列3:获取泛型的类型

    4.3 获取泛型的类型 问题 您需要在运行时获得一个泛型类型实例的Type对象. 解决方案 在使用typeof操作符时提供类型参数:使用类型参数实例化的泛型类型,用GetType()方法. 声明一个一 ...

  9. java 反射和泛型-反射来获取泛型信息

    通过指定对应的Class对象,程序可以获得该类里面所有的Field,不管该Field使用private 方法public.获得Field对象后都可以使用getType()来获取其类型. Class&l ...

最新文章

  1. 嵌入式开发「坑」太多?MathWorks 高级工程师教你 debug
  2. 中国引领全球主导人工智能竞赛
  3. Python基础,面向对象
  4. centos6.5 mysql下载_Centos6.5在线安装mysql 8.0详细教程
  5. 【Linux 内核】实时调度类 ① ( 进程分类 | 实时进程、普通进程 | Linux 内核 SCHED_FIFO、SCHED_RR 调度策略 | 实时调度实体 sched_rt_entity )
  6. 初识Django —Python API接口编程入门
  7. 纯c gSoap实现WebService
  8. 各个硬件指令集使用简单介绍
  9. mysql中的blob和text区别
  10. nssl1162-农夫约的假期【中位数,贪心】
  11. appium和selenium不同与相同之处
  12. vue调用手机相机相册_今天才发现,点一下小米手机相册,能将照片一键制作成电影...
  13. linux显示文本文件指定行数的数据
  14. Struts,Spring,Hibernate三大框架的面试
  15. 237Echarts - 3D 柱状图(Image to Bar3D)
  16. 计算机软件的四种人才
  17. TP-LINK三层网管交换机通过console接口完成复位操作
  18. 统计学基础4-随机变量及分布
  19. Angular JS introduce
  20. Linux shell的输入输出

热门文章

  1. restful风格的增删改查
  2. 常见电脑字符编码总结
  3. 音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw
  4. 解决: Intellij IDEA 运行报错 Command line is too long
  5. HDU 6706 huntian oy
  6. 沉淀再出发:Spring的架构理解
  7. 【文章】孝心无价 作者:毕淑敏
  8. windows mysqldump 不成功 1049 1064 报错
  9. Spring学习笔记--自动装配Bean属性
  10. 矩阵快速幂 POJ 3070 Fibonacci