How to get a class instance of generics type T

考虑泛型类Foo<T>,在其成员中,如果想获取类型(type)T的类实例(class instance of type T),是不可以直接调用 T.class的。原因在于,Java 语言无法获取泛型类型参数(T)的运行时信息(不可以直接调用 T.class)。

  • 获得类名(以 String 的类型)

    public class A{}
    A.class.getSimpleName();
    

0. 常用解决方案

既然无法调用泛型类型参数的运行时类型信息,便在调用端,显示地传递该类的运行时类型信息进去(通过构造函数),一种惯用的解决方案如下:

class Foo<T> {private final Class<T> type;public Foo<T>(Class<T> type) {this.type = type;}public static void main(String[] args) {// 在客户端调用时,便会显得有些啰嗦Foo<SomeClass> f = new Foo<SomeClass>(SomeClass.class);}
}

1. Pure Java solution

  • <a href=“http://blog.xebia.com/acessing-generic-types-at-runtime-in-java/”, target="_blank">Accessing generic types at runtime in Java

Java 类型信息 —— 获取泛型类型的类对象(.class)相关推荐

  1. .class 字节码文件与Java RTTI(类型信息)(.class 类对象)

    RTTI:Run-Time Type Information,关键词在 Run-Time,运行时的,而非编译期确定的关于类型的信息.运行时的类型信息(RunTime Type Information) ...

  2. 深入理解Java类型信息(Class对象)与反射机制

    关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java并发之synchronize ...

  3. 深入Java类型信息:RTTI和反射

    转载自 「深入Java」类型信息:RTTI和反射 1.RTTI Run-Time Type Infomation 运行时类型信息 为什么需要RTTI? 越是优秀的面向对象设计,越是强调高内聚低耦合,正 ...

  4. Java大数据学习第六天------面向对象 类 对象 封装

    面向过程: ​ 强调的是过程, 面向对象: ​ 强调的是结果,只需要关注结果就好. 面向对象的三大特征: 封装: 把相关的数据封装成一个"类"组件 继承: 是子类自动共享父类属性和 ...

  5. Java service层获取HttpServletRequest工具类的方法

    大家都知道 能在Controller/action层获取HttpServletRequest ,但是这里给大家备份的是从代码内部service层获取HttpServletRequest工具类. 具体如 ...

  6. java中 怎么获取bean_java普通类如何得到spring中的bean类

    在SSH集成的前提下.某些情况我们需要在Action以外的类中来获得Spring所管理的Service对象. 之前我在网上找了好几好久都没有找到合适的方法.例如: ApplicationContext ...

  7. java 实例化异常_如何处理实例化类对象时发生的异常

    java version "1.7.0_45" 你好 我正在构造函数中初始化类方法.但是,新URL(uploadUrl)将在构造函数中引发异常.因此,如果发生这种情况,用户应该无法 ...

  8. 【Java 19】反射 - 反射机制概述、获取Class实例、类的加载与ClassLoader的理解、创建运行时类的对象、获取运行时类的完整结构、调用运行时类的指定结构、动态代理

    反射机制概述.获取Class实例.类的加载与ClassLoader的理解.创建运行时类的对象.获取运行时类的完整结构.调用运行时类的指定结构.动态代理 反射 1 Java反射机制概述 1.1 Java ...

  9. java获取实体类对象_java 获取实体类对象属性值的方法

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...

最新文章

  1. 网络工程师转售前的条件
  2. 关于js中window.location.href、location.href 等如何跳转
  3. myeclipse 8.5 常用快捷键
  4. 【论文解读】KDD2020最佳论文: 关于个性化排序任务评价指标的大讨论
  5. 将redis当做使用LRU算法的缓存来使用
  6. cad加载插件快捷键命令_cad自动加载lsp插件,这一种方法你肯定没用过!
  7. linux内核模块配置,如何为linux内核模块开发配置clang_complete?
  8. pat 乙级 1056 组合数的和(C++)
  9. ubuntu18.04安装opencv4.3.0
  10. mysql publishedtime_MySQL数据库中的Date,DateTime,TimeStamp和Time类型
  11. Django--4、认证系统
  12. 面试题整理 | 45道CSS面试题
  13. 什么是聚集索引和非聚集索引 ( 或者聚簇索引和非聚簇索引 )
  14. 利用python批量查询企业信息_python批量查询百度收录
  15. Impala metrics之statestore-subscriber
  16. 操作系统的功能和意义
  17. ES5和ES6的类,静态方法,继承实现代码
  18. UWB地铁隧道人员定位实现运营人员健康智能监测
  19. IDEA版最新SMM整合,根据手机号实现登录/注册/修改密码
  20. 苹果电脑修改MAC地址(随机生成)

热门文章

  1. 手把手,快速搭建 Cocos2d-HTML5 开发调试环境
  2. mysql workbench 导出查询结果_MySQL Workbench查询结果导出步骤
  3. cudnn7.6.5下载 solitairetheme8_233小游戏下载安装赚钱-233小游戏下载安装最新版v2.29.4.5...
  4. android通知栏应用程序更新,Android App自动更新之通知栏下载
  5. Ros无法自动补全命令的解决
  6. Mysql 的 Explain性能分析
  7. Dubbo注册中心-监控中心安装笔记(CentOS7)
  8. vue 高德轨迹自定义两点之间的颜色_vue 还是 react?这是一个问题
  9. 消息队列(MQ):ZeroMQ 中间件设计【译文】
  10. tenorflow异常集合(自用记录)