在日常的开发中特别是框架的设计或者实用反射的时候,经常会实用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的具体类型相关推荐

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

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

  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 获取泛型_聊聊Java泛型擦除那些事

    >版权申明]非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/89789849 出自:shushen ...

  6. java 获取泛型_Java泛型 | Jackson TypeReference获取泛型类型信息

    前言 Jackson是一个比较流行的Json序列化和反序列化框架.本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TypeReference的实现原理.对于获取泛型类型 ...

  7. java 获取泛型t的class_阿里巴巴都鼎力推荐的java基础之集合其他内容和泛型3

    第三节 泛型 3.1为什么需要泛型 没有采用泛型之前 1.不安全:添加元素是无检查 宽进 2.繁琐:获取元素时需要强制类型转换 严出 采用泛型之后 1.安全 严进 2.简单 宽出 3.2什么是泛型ge ...

  8. java 获取泛型的属性_java在泛型类 T 上利用反射取属性值

    记录一次反射的使用,第一次真正运用到实际工作中,发现反射是真的强大! 写了一个通用类,主要是便于和 db 的交互操作,使用到了泛型 T 对象,但是有一步需要获取该对象的属性 id 值(前提是所有赋值给 ...

  9. java获取数据库的列名,类型等信息

    2019独角兽企业重金招聘Python工程师标准>>> 当你使用和学习JDK的时候,可以查看并学习它所提供给你的两个ResultSetMetaData  和DataBaseMetaD ...

最新文章

  1. 矩阵乘法的本质是什么
  2. php exchange,PHP SDK for digital currency exchange
  3. xlwt什么版本支持xlsx的版本_Spring Framework Versions版本支持说明
  4. pandas Dataframe统计缺失值占比
  5. mysql语法错误文件_使用logstash同步MySQL的数据时,在jdbc查询sql文件时报sql语法错误,sql文件是navicat生成的...
  6. Mybatis工作中常用动态SQL总结
  7. MATLAB BP神经网络的设计与优化
  8. 【计算机视觉】exe视频转mp4、采集视频中图片记录、删除ABC看图王等软件
  9. 电脑如何防蹭网?使用防蹭网功能杜绝未知设备连接WiFi
  10. Tensorflow基础语法以及网络搭建
  11. 图片怎么识别文字?超实用的文字识别技巧分享,分享给你
  12. spring boot(四):thymeleaf使用详解
  13. 更新驱动后重启黑屏且进不了bios时的一个解决办法
  14. 锐捷交换机处理环路问题
  15. CTFshow_萌新(密码)
  16. 通过置换标签的方式给数据集加噪声
  17. 从零开始配置 react + typescript(三):webpack
  18. CAN接口测试工装研究
  19. ECharts(3)
  20. 巾帼不让须眉 IT界10大女性CEO排行

热门文章

  1. class.getClassLoader().getResource(xxx)是什么意思啊?最后这个xxx和这个类有什么关系?...
  2. linux sd卡修复工具,如何使用'fsck'修复Linux中的文件系统错误
  3. 严正声明:硅谷密探与阿尔法币无任何关系
  4. 哪位大侠知道“圣斗士星失”冥王篇后面还有没有续集?哪里能down?
  5. 中国商飞公司信息化计划处处长李云峰:企业数字化变革
  6. 新手入门百度地图开发的(0,0)坐标问题
  7. 项目下没有Web App Libraries
  8. 【Linux】页表的实现与地址转换
  9. Flink集成数据湖之实时数据写入iceberg
  10. (C语言版)猴子吃桃问题