怎么样获得泛型T的Class对象?
public class GenClass<T> {
private Class<T> entityClass;
}
public class Test {
public static void main(String[] args) {
		GenClass<User> gen = new GenClass<User>();
	}
}
这样用的话,GenClass中如何获得T类型的Class对象
java中没法得到泛型参数化类型,因为在编译期没法确定泛型参数化类型,也就找不到对应的类字节码文件,自然就不行了
Type genType = clazz.getGenericSuperclass();
Type [] params = ((ParameterizedType) genType).getActualTypeArguments();
return (Class) params[0];
泛型反射的关键是获取ParameterizedType,再调用它的getActualTypeArguments()方法获得实际绑定的类
型。但注意public class BookManager<Book>是不能被反射的,因为擦拭法的缘故。只有在Superclass
或者成员变量(Field.getGenericType())等有函数返回ParameterizedType的时候才能成功反射
Java中的范型是用擦除实现的,简单点儿就是编译期能看到类型信息,但运行期T其实都变成Object了,也就是说运行期通过反射不会获得类型信息,就算获得也只是Object类型. 
但这也不是完全不可能的,对于带有上边界限定符的如<T extends Comparable<T>>
你可以获得到Comparable类型.这个信息被保存到了运行时.通用化之后<T>获得的与<T extends Object>相同,上边界换成了Object.
怎么样获得泛型T的Class对象?的更多相关文章
- winform中利用反射实现泛型数据访问对象基类(1)
		考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ... 
- WCF 笔记 (2) - 传输泛型 List 对象
		WCF 笔记 (2) - 传输泛型 List 对象 本帖介绍怎么在 WCF 中,在 Server-side 和 Client-side 之间,传递默认无法传输的 List<T>.List& ... 
- 应用程序框架实战十七:DDD分层架构之值对象(层超类型篇)
		上一篇介绍了值对象的基本概念,得到了一些朋友的支持,另外也有一些朋友提出了不同意见.这其实是很自然的事情,设计本来就充满了各种可能性,没有绝对正确的做法,只有更好的实践.但是设计与实践的好与坏,对于不 ... 
- (翻译)反射处理java泛型
		当我们声明了一个泛型的接口或类,或需要一个子类继承至这个泛型类,而我们又希望利用反射获取这些泛型参数信息.这就是本文将要介绍的ReflectionUtil就是为了解决这类问题的辅助工具类,为java. ... 
- 以对象的方式来访问xml数据表(三)
		怎样以对象的方式来访问xml数据表? 在讲如何具体实现(二)中所说的专门用于访问xml文件的动态链接库之前,我们先来看看这个动态链接库具体要实现什么功能. 动态链接库IXmlDB.dll的功能: 1. ... 
- Java中泛型在集合框架中的应用
		泛型是Java中的一个重要概念,上一篇文章我们说过,当元素存入集合时,集合会将元素转换为Object类型存储,当取出时也是按照Object取出的,所以用get方法取出时,我们会进行强制类型转换,并且通 ... 
- 黑马程序员_<<泛型>>
		--------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1. 泛型 1.概述 泛型是为了解决 ... 
- Thinking In Java读书笔记--对象导论
		Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ... 
- DDD分层架构之值对象(层超类型篇)
		DDD分层架构之值对象(层超类型篇) 上一篇介绍了值对象的基本概念,得到了一些朋友的支持,另外也有一些朋友提出了不同意见.这其实是很自然的事情,设计本来就充满了各种可能性,没有绝对正确的做法,只有更好 ... 
随机推荐
- el-select绑定值为对象时,报错[Vue warn]: <transition-group> children must be keyed: <ElTag>
			解决方法: <el-select v-model="syncParams.toSlaveList" multiple value-key="ip" pla ... 
- C#函数多返回值的方法
			C#以前都是不支持多返回值,当需要返回多个值的时候,就会感觉比较麻烦,通常的做法有 1.采用ref,out 关键字返回 2.定义类或者结构体 返回对象 C# 6.0出来了新的语法 Tuple 支付返回 ... 
- es6总结(六)--新数据类型-Symbol
- [LeetCode] Text Justification words显示的排序控制
			Given an array of words and a length L, format the text such that each line has exactly L characters ... 
- 升级 GCC 支持C++11 或 configure: error: *** A compiler with support for C++11 language features is required.
			configure: error: *** A compiler with support for C++11 language features is required. 参考链接: (1)升级 G ... 
- 2014 ACM/ICPC  亚洲区 北京站
			题目链接 2014北京区域赛 Problem A Problem B 直接DFS+剪枝 剪枝条件:当前剩余的方块数量cnt < 2 * max{a[i]} - 1,则停止往下搜. 因为这样搜下 ... 
- Python通用编程
			本文是Python通用编程系列教程,已全部更新完成,实现的目标是从零基础开始到精通Python编程语言.本教程不是对Python的内容进行泛泛而谈,而是精细化,深入化的讲解,共5个阶段,25章内容.所 ... 
- POJ 1860 Currency Exchange 最短路+负环
			原题链接:http://poj.org/problem?id=1860 Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Tota ... 
- Spring Cloud Eureka 自我保护机制实战分析
			前些天栈长在Java技术栈微信公众号分享过 Spring Cloud Eureka 的系列文章: Spring Cloud Eureka 自我保护机制 Spring Cloud Eureka 常用配置 ... 
- C# 生成二维码(带Logo)
			C# 生成二维码(带Logo) 第一种方式 我们需要引用 ThoughtWorks.QRCode.dll 生成带logo二维码(framework4.0以上) 下载地址:https://pan.ba ... 
