获取泛型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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写给大数据开发初学者的话5

见&#xff1a;http://lxw1234.com/archives/2017/01/832.htm 至此&#xff0c;你的大数据平台底层架构已经成型了&#xff0c;其中包括了数据采集、数据存储与计算&#xff08;离线和实时&#xff09;、数据同步、任务调度与监控这几大模块。接下来是时候考虑如何更好的对外提…

3.spring boot Controller获取请求参数的值

2019独角兽企业重金招聘Python工程师标准>>> 1.获取连接中的参数,使用倒的关键词PathVariable RestController public class HelloController {RequestMapping(value "/hello/{id}",method RequestMethod.GET)public String index(PathVariable("i…

断开的管道 java.io.IOException: Broken pipe 解决方法

断开的管道 java.io.IOException: Broken pipe 解决方法一、Broken pipe产生原因分析1.当访问某个服务突然服务器挂了&#xff0c;就会产生Broken pipe;2.客户端读取超时关闭了连接&#xff0c;这时服务器往客户端再写数据就发生了broken pipe异常&#xff01;二、方案1.问题一…

登录与注册

代码如下 private void btn_login_Click(object sender, EventArgs e){SqlConnection sqlconnection new SqlConnection();sqlconnection.ConnectionString ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;SqlCommand sqlcommand new SqlComman…

四大电商对垒价格战:家电高库存或是推手

摘要&#xff1a;[京东、苏宁、国美、天猫等电商在家电领域的价格战&#xff0c;更多是定价方家电厂商的倒逼]  “五一”期间&#xff0c;电商企业发起的价格战硝烟仍未消散&#xff0c;如今战火又起。一种较为普遍的看法是&#xff0c;此次价格战&#xff0c;正是各家电商企…

三分钟明白 Activiti工作流 -- java运用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、 什么是工作流 以请假为例&#xff0c;现在大多数公司的请假流程是这样的 员工打电话&#xff08;或网聊&#xff09;向上级提出请…

linux命令 ps -ef 的含义

PS是LINUX下最常用的也是非常强大的进程查看命令//以下这条命令是检查java 进程是否存在. ps -ef |grep java下面对命令选项进行说明&#xff1a;-e 显示所有进程。-f 全格式。ps -e 列出程序时&#xff0c;显示每个程序所使用的环境变量。ps -f 用ASCII字符显示 树状结构 &…

vue-i18n使用及踩坑记录

使用步骤 1. 安装 npm i vue-i18n 2. vue-cli下使用 //1. 引入 vue-i18n import Vue from vue import VueI18n from vue-i18n Vue.use(VueI18n)//2. 定义messages const messages {en: {text: {hello: hello world}},zh: {text: {hello: 你好、世界}} }//如果messages字段很多…

idea搭建web项目及tomcat部署总结

该文章为引用文章&#xff0c;原地址为&#xff1a;https://www.cnblogs.com/shindo/p/7272646.html 后面有我自己搭建过程中遇到的问题及解决方案&#xff0c;请参考。 一、创建简单web项目 1、创建一个web project File -> new Project ->选择project sdk 为1.6&#x…

Activiti工作流框架学习(一)环境的搭建和数据表的了解

一、什么是工作流 工作流(Workflow)&#xff0c;就是“业务过程的部分或整体在计算机应用环境下的自动化”&#xff0c;它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行&#xff0c;从而实现某个预期的业务目标&#xff0c;或者促使…

中国消费者为何不愿为App付费?

Facebook收购Instagram之后&#xff0c;国内的开发者们唏嘘不已。Instagram的用户不过3000万&#xff0c;却能卖出10亿美元的价格。如果Instagram在国内的话&#xff0c;就算没被关闭也会被抄袭。如果通过收费来赚钱的话&#xff0c;也会因为黑卡变得颗粒无收&#xff0c;最终很…

什么是交换分区

SWAP就是LINUX下的虚拟内存 分区,它的作用是在 物理内存 使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似&#xff0c;但是它是一段连续的磁盘空间&#xff0c;并且对用户不可见。

基础、语法都不是最重要的,学Python最重要的是什么?编程思路!

论述 一些朋友自学python过程中&#xff0c;发现书也能看懂&#xff0c;书上的玩具代码也能看懂&#xff0c;但为啥自己不能做习题&#xff0c;不能写代码解决问题&#xff0c;自己不能动手写代码&#xff1f; 原因 初学者没有学会计算思维、解决问题的方法、编程思路。编程思路…

Windows下启动,关闭Nginx命令

启动 直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx 关闭 nginx -s stop 或者 nginx -s quit stop表示立即停止nginx,不保存相关信息 quit表示正常退出nginx,并保存相关信息 重启(因为改变了配置,需要重启) nginx -s reload 转载于:https://www.cnblogs…

什么是守护进程?

守护进程是在后台运行不受终端控制的进程&#xff08;如输入、输出等&#xff09;&#xff0c;一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点&#xff1a;&#xff08;1&#xff09;用来启动守护进程的终端在启动守护进程之后&#xff0c;需要执行…

Activiti工作流引擎的使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Activiti工作流引擎使用 1.简单介工作流引擎与Activiti 对于工作流引擎的解释请参考百度百科&#xff1a;工作流引擎 1.1 我与工作流引…

Flurry调查报告:图片和视频应用增长速度最快

据外国媒体报道&#xff0c;移动数据分析公司Flurry近期对应用分类的欢迎度进行研究后发现&#xff0c;就用户使用的时间而言&#xff0c;“图片和视频”应用已成为增长最快的移动应用。 Flurry对各种应用分类的800多万移动用户进行了调查&#xff0c;并利用其分析工具跟踪了1…

JS内存管理与垃圾回收

javascript的内存管理Javascript 是那些被称作垃圾回收语言当中的一员。垃圾回收语言通过周期性地检查那些之前被分配出去的内存是否可以从应用的其他部分访问来帮助开发者管理内存。换句话说&#xff0c;当计算机发现有的内存已经不能被访问到了&#xff0c;就会把它们标记为垃…

牛客网分糖果

题解&#xff1a; 考试的时候没有想出来。。。 刚开始想了个比较错误的dp 后来想到了容斥。。 但是没有想到怎么去维护这个东西。。 按照一般的套路 至少有一个相邻相等的-至少有两个相邻相等的 但是这道题里这样并不好维护 我们考虑用dp来算这个东西 f[i]f[j]*min(a[j].....a[…

HTTP 503 错误 – 服务不可用 (Service unavailable)

介绍因暂时超载或临时维护&#xff0c;您的 Web 服务器目前无法处理 HTTP 请求。 其含义是&#xff0c; 这是一个暂时情况&#xff0c;会有一些延误&#xff0c; 过 后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字&#xff08;socket&#xff09; 连接&#xff0c…