【转】Java获取泛型T的具体类型
在日常的开发中特别是框架的设计或者实用反射的时候,经常会实用class类去做一些事情,但是由于系统的抽象等问题,经常实用泛型去做一些事情。所以如何在泛型中获取具体的class类呢?
解决方案:父类本身不获取泛型的具体类型,仅提供抽象方法,由子类来提供具体的类型
public abstract class Foo<T> { public abstract Class getEntityClass();
} public class Child extends Foo<String> { public Class getEntityClass() { return String.class; }
}
工具类:
mport java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;public class GenericsUtils {/*** 通过反射,获得定义Class时声明的父类的范型参数的类型. 如public BookManager extends* GenricManager<Book>* * @param clazz The class to introspect* @return the first generic declaration, or <code>Object.class</code> if cannot be determined*/public static Class getSuperClassGenricType(Class clazz) {return getSuperClassGenricType(clazz, 0);}/*** 通过反射,获得定义Class时声明的父类的范型参数的类型. 如public BookManager extends GenricManager<Book>* * @param clazz clazz The class to introspect* @param index the Index of the generic ddeclaration,start from 0.*/public static Class getSuperClassGenricType(Class clazz, int index)throws IndexOutOfBoundsException {Type genType = clazz.getGenericSuperclass();if (!(genType instanceof ParameterizedType)) {return Object.class;}Type[] params = ((ParameterizedType) genType).getActualTypeArguments();if (index >= params.length || index < 0) {return Object.class;}if (!(params[index] instanceof Class)) {return Object.class;}return (Class) params[index];}
}
【转】Java获取泛型T的具体类型相关推荐
- java 获取泛型的type,如何获取泛型的Type类型
开发中很多时候都遇到或使用到泛型.例如在json转换成bean对象或其他对象,而对象中存在泛型,这时候需要用到TypeToken. Type:是java里的 java.lang.reflect.Typ ...
- 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 获取泛型_聊聊Java泛型擦除那些事
>版权申明]非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/89789849 出自:shushen ...
- java 获取泛型_Java泛型 | Jackson TypeReference获取泛型类型信息
前言 Jackson是一个比较流行的Json序列化和反序列化框架.本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TypeReference的实现原理.对于获取泛型类型 ...
- java 获取泛型t的class_阿里巴巴都鼎力推荐的java基础之集合其他内容和泛型3
第三节 泛型 3.1为什么需要泛型 没有采用泛型之前 1.不安全:添加元素是无检查 宽进 2.繁琐:获取元素时需要强制类型转换 严出 采用泛型之后 1.安全 严进 2.简单 宽出 3.2什么是泛型ge ...
- java 获取泛型的属性_java在泛型类 T 上利用反射取属性值
记录一次反射的使用,第一次真正运用到实际工作中,发现反射是真的强大! 写了一个通用类,主要是便于和 db 的交互操作,使用到了泛型 T 对象,但是有一步需要获取该对象的属性 id 值(前提是所有赋值给 ...
- java获取数据库的列名,类型等信息
2019独角兽企业重金招聘Python工程师标准>>> 当你使用和学习JDK的时候,可以查看并学习它所提供给你的两个ResultSetMetaData 和DataBaseMetaD ...
最新文章
- 矩阵乘法的本质是什么
- php exchange,PHP SDK for digital currency exchange
- xlwt什么版本支持xlsx的版本_Spring Framework Versions版本支持说明
- pandas Dataframe统计缺失值占比
- mysql语法错误文件_使用logstash同步MySQL的数据时,在jdbc查询sql文件时报sql语法错误,sql文件是navicat生成的...
- Mybatis工作中常用动态SQL总结
- MATLAB BP神经网络的设计与优化
- 【计算机视觉】exe视频转mp4、采集视频中图片记录、删除ABC看图王等软件
- 电脑如何防蹭网?使用防蹭网功能杜绝未知设备连接WiFi
- Tensorflow基础语法以及网络搭建
- 图片怎么识别文字?超实用的文字识别技巧分享,分享给你
- spring boot(四):thymeleaf使用详解
- 更新驱动后重启黑屏且进不了bios时的一个解决办法
- 锐捷交换机处理环路问题
- CTFshow_萌新(密码)
- 通过置换标签的方式给数据集加噪声
- 从零开始配置 react + typescript(三):webpack
- CAN接口测试工装研究
- ECharts(3)
- 巾帼不让须眉 IT界10大女性CEO排行
热门文章
- class.getClassLoader().getResource(xxx)是什么意思啊?最后这个xxx和这个类有什么关系?...
- linux sd卡修复工具,如何使用'fsck'修复Linux中的文件系统错误
- 严正声明:硅谷密探与阿尔法币无任何关系
- 哪位大侠知道“圣斗士星失”冥王篇后面还有没有续集?哪里能down?
- 中国商飞公司信息化计划处处长李云峰:企业数字化变革
- 新手入门百度地图开发的(0,0)坐标问题
- 项目下没有Web App Libraries
- 【Linux】页表的实现与地址转换
- Flink集成数据湖之实时数据写入iceberg
- (C语言版)猴子吃桃问题