前一阵在做一个功能的时候,要通过反射去取List的范型定义,所以研究了一下java范型的整个模型,现在总结一下,免得以后忘掉。
大家都说Java范型是编译器层面的实现,运行时拿不到范型类。就这句话,我的理解就是,通过对象实例,你是拿不到其范型相关信息,而记录在字节码里的,也就是类上的,方法上的,类变量上的还是可以拿到的。比如某个类中的代码
//这里Alist的超类限制了是只能放String的范型
//这个范型信息可以通过Alist.class来获取
public class AList extends ArrayList<String> {
public void Test() {
//这个list实例的范型定义应该是只能放String
//但这个信息是仅仅依靠list这个实例引用是取不到的
List<String> list = new ArrayList<String>()
}
}
java范型的根对象是java.lang.reflect.Type接口该接口没有任何方法,仅仅是一个标志性的接口,所有的范型信息(也就是<>中定义的东西)都是可以上溯到该接口。
该接口下有四类子接口和一实现类,实现类就是Class类,而接口包括:
GenericArrayType, ParameterizedType, TypeVariable<D>, WildcardType
妈的,这几个名字可够拗口的。其中TypeVariable<D>和其他三种接口类型有一定的明显区别,虽然他们都是用来定义<>中的东东。
说到TypeVariable<D>就不得不提起java范型中另一个比较重要的接口对象,java.lang.reflect.GenericDeclaration接口对象。该接口用来定义哪些对象上是可以声明范型变量,所谓范型变量就是<E extends List>或者<E>, 也就是TypeVariable<D>这个接口的对应的对象,TypeVariable<D>中的D是extends GenericDeclaration的,用来通过范型变量反向获取拥有这个变量的GenericDeclaration
目前实现GenericDeclaration接口的类包括Class, Method, Constructor,也就是只能在这几种对象上进行范型变量的声明。GenericDeclaration的接口方法getTypeParameters用来逐个获取该GenericDeclaration的范型变量声明。
比如:
public class ClassA <K extends List & Serializable, V> {
}
类ClassA上就有两个TypeVariable<D>可以通过ClassA.class.getTypeParameters()[0]来获取第一个范型变量"K extends List"的信息。从而更进一步拿到变量名字,变量上界,变量所在的GenericDeclaration对象。
//获取范型变量定义
TypeVariable t = ClassA.class.getTypeParameters()[0];
t.getName();//获取变量名字,返回K
t.getGenericDeclaration();//获取变量被定义在什么GenericDeclaration上,这里返回ClassA.class
t.getBounds()[0];//变量上边界数组,这里返回List.class
t.getBounds()[1];//变量上边界数组,这里返回Serializable.class
//当然可以获取第二个变量定义
t = ClassA.class.getTypeParameters()[1];
t.getName();//返回V
t.getGenericDeclaration();//获取变量被定义在什么GenericDeclaration上,这里返回ClassA.class
t.getBounds()[0];//变量上边界数组,这里返回Object.class,并且上边界只有一个
分享到:
相关推荐
《分布式系统原理与范型--(第二版)》复习资料。用于课堂学习,期末复习
DecalSDL-Delphi的范型类库-通用数据结构与算法类库(一).pdf
消息传递范型与C/S范型双范型的主数据管理机制,陈晓云,邢乔金,本文针对主数据管理(MDM)存在的问题提出了一种基于消息传递机制范型与C/S范型双范型的主数据管理机制,当各个分系统的数据有所变化�
华中科技大学 分布式系统原理与范型_考试_2009_答案
分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版)
第2~9章讨论的是分布式系统的的原理、概念和技术,包括通信、进程、命名、同步化、一致性和复制、容错性以及安全性等,而分布式应用的开发方法(即范型)在第10~13章中进行了讨论。但是,与前一版不同的是,我们...
C++多范型设计,ISBN:9787508318240,作者:(美)James O.Coplien著;鄢爱兰,周辉等译;鄢爱兰译
《分布式系统原理与范型》是分布式系统中的经典教材,全书分为两部分:原理和范型。第一部分详细讨论了分布式系统的原理、概念和技术,其中包括通信、进程、命名、同步、一致性和复制、容错以及安全。第二部分给出了...
分布式系统原理与范型(第二版)第五章命名系统的PPT英文版
分布式系统原理与范型第二版课后习题答案 分布式系统原理与范型第二版课后习题答案 分布式系统原理与范型第二版课后习题答案 分布式系统原理与范型第二版课后习题答案
Java 范型Java 范型
范型程序设计与 STL.pdf,大小约 300K。
《分布式系统原理与范型》第一版.中文版,影印版。
java1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.doc
全书涵盖了这样一些重要的概念或方法,需要读者重点把握:软件族、共同性、积极或消极差异性、领域分析、领域划分、领域词汇表、面向对象的分析、复用、迭代、绑定、依赖关系图、范型混合,以及模式等。 本书第1章...
是《分布式系统原理与范型(第二版)》的答案 上回写错了,易造成误解! 本文档是第二版书的答案哦! 绝对是新的哦! 英文的!
《七周七语言:理解多种编程范型》共介绍了七种不同的编程语言。对于每种语言,分别介绍了各自的特性、应用,以及编程入门知识和关键编程范型,还带领读者使用能够代表该语言最重要特性的技术,解决某个不寻常的问题...
详细介绍分布式原理和基本范型, 是一部不可多得的分布式经典书籍。
分布式系统原理与范型.pdf tanenbaum的早期操作系统著作
C++多范型设计.pdfC++多范型设计.pdfC++多范型设计.pdf