获取泛型T的ClassT clazz
在我们搭建框架中往往会用到泛型,我们知道泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,代码的重用率高
然而有时候<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相关推荐
- java 泛型反射_Java使用反射来获取泛型信息示例
本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...
- Java获取泛型T的类型 T.class
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type;public class Main{public s ...
- [转载] Java获取泛型T的类型 T.class
参考链接: Java中的抽象 import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public cla ...
- java获取泛型的类型_Java反射获取泛型类型
public class Person{ }importjava.lang.reflect.ParameterizedType;importjava.lang.reflect.Type;public ...
- 【转】Java获取泛型T的具体类型
在日常的开发中特别是框架的设计或者实用反射的时候,经常会实用class类去做一些事情,但是由于系统的抽象等问题,经常实用泛型去做一些事情.所以如何在泛型中获取具体的class类呢? 解决方案:父类本身 ...
- java 获取泛型的type,如何获取泛型的Type类型
开发中很多时候都遇到或使用到泛型.例如在json转换成bean对象或其他对象,而对象中存在泛型,这时候需要用到TypeToken. Type:是java里的 java.lang.reflect.Typ ...
- Java通过Class的对象来获取泛型的class示例
转载自 Java通过Class的对象来获取泛型的class示例 在使用spring的JdbcTemplate实现DAO的时候,经常会用到一个类ParameterizedBeanPropertyRow ...
- 泛型系列3:获取泛型的类型
4.3 获取泛型的类型 问题 您需要在运行时获得一个泛型类型实例的Type对象. 解决方案 在使用typeof操作符时提供类型参数:使用类型参数实例化的泛型类型,用GetType()方法. 声明一个一 ...
- java 反射和泛型-反射来获取泛型信息
通过指定对应的Class对象,程序可以获得该类里面所有的Field,不管该Field使用private 方法public.获得Field对象后都可以使用getType()来获取其类型. Class&l ...
最新文章
- 嵌入式开发「坑」太多?MathWorks 高级工程师教你 debug
- 中国引领全球主导人工智能竞赛
- Python基础,面向对象
- centos6.5 mysql下载_Centos6.5在线安装mysql 8.0详细教程
- 【Linux 内核】实时调度类 ① ( 进程分类 | 实时进程、普通进程 | Linux 内核 SCHED_FIFO、SCHED_RR 调度策略 | 实时调度实体 sched_rt_entity )
- 初识Django —Python API接口编程入门
- 纯c gSoap实现WebService
- 各个硬件指令集使用简单介绍
- mysql中的blob和text区别
- nssl1162-农夫约的假期【中位数,贪心】
- appium和selenium不同与相同之处
- vue调用手机相机相册_今天才发现,点一下小米手机相册,能将照片一键制作成电影...
- linux显示文本文件指定行数的数据
- Struts,Spring,Hibernate三大框架的面试
- 237Echarts - 3D 柱状图(Image to Bar3D)
- 计算机软件的四种人才
- TP-LINK三层网管交换机通过console接口完成复位操作
- 统计学基础4-随机变量及分布
- Angular JS introduce
- Linux shell的输入输出