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)。

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

最新文章

  1. c# json转换实例
  2. jquery的$.extend()、$.fn和$.fn.extend()
  3. Runner站立会议08
  4. dict.items vs six.iteritems
  5. 反射中getMethods 与 getDeclaredMethods 的区别
  6. 转:Struts标签checkbox使用总结(默认选择设置)
  7. nginx添加nginx_mod_h264_streaming-2.2.7模块编译报错
  8. GitHub之上传文件
  9. IP访问SQL数据库设置
  10. php基础知识【函数】(6)mysql数据库
  11. Lance老师UI系列教程第八课-&gt;新浪新闻SlidingMenu界面的实现
  12. XJOI网上同步训练DAY6 T2
  13. javascript收集整理
  14. PHP 模板方法模式使用
  15. 2015 Multi-University Training Contest 4
  16. 【Tomcat】batch获得war包
  17. Spring第二篇【Core模块之快速入门、bean创建细节、创建对象】
  18. __block __weak
  19. 简述private,protected,public,internal修饰符的访问权限
  20. 微信小程序picker的坑

热门文章

  1. 安装php扩展(以swoole)为例
  2. Python:用户自定义异常
  3. Nginx(alias 和 root的区别)
  4. Python Pandas库的学习(一)
  5. python爬虫入门01:教你在 Chrome 浏览器轻松抓包
  6. Tomcat处理HTTP请求原理
  7. Python使用selenium实现网页用户名 密码 验证码自动登录功能
  8. HDU1811 并查集+拓扑排序
  9. [BZOJ3196] [Tyvj1730] 二逼平衡树(线段树 套 Splay)
  10. [bzoj3436]小K的农场_差分约束