JSR-14-泛型Java的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSR-14-泛型Java的实现
第22卷第3期计算机仿真2004年5月文章编号:1006—9348(2005)03—0232—03
JSR二14:泛型Java的实现
刘峻
(上海交通大学计算机软件与理论专业,上海200030)
摘要:该文围绕即将加入Java语言规范的泛型特性进行了讨论,JSR一14.就是这一特性的实现。
文章首先展示了在Java中使用泛型的语法,包括泛型类、泛型方法以及极具特色的受限类型参数;然后深入揭示了JSR一14实现泛型的内部机制——用擦拭法将源文件翻译成为与原先字节代码兼容的形式,并讨论了在不同情况下擦拭法的具体实现方式;最后讨论了该实现的优点和限制,着重分析了它的限制,指出这些限制正是由于擦拭法所产生的,并分别分析了每种限制的具体原因。
关键词:泛型;参数化类型;擦拭法;软件
中图分类号:伪12JA文献标识码:A
JSR--14:The。
ImplementationofGenericJava
IJ[UJ吼
(ComputerSoftwareandTheory,ShanghaiJiaotongUniversity,Shanghai200030,China)ABSTRACt:ThisarticleisallaboutJSR一14,theimplementationofGenericJava,whichwillbeaddedtoJavaLanguageSpecificationintheneaxfuture.FirstlythearticlegivesadescriptionofthesyntaxofgenericsinJava,includinggeneric
class,genericmethodandboundedtypeparameter.SecondlyitrevealsthemechanismofJSR一14,calledErssure,whichtranslatesfloulccecodetobyteeedecompatibletotheoriginalspecification.L鹪dyitdiscussesboththeadvantagesandthelimitationsofJSR一14,puttingemphasisonthelimitationsandpointingoutErasul_{eisthe80UI'P啤oftheselimitations.ThenitanalysestherelationshipbetweentheselimitationsandFA-RSRI_e.
KEYWORI峪:Generics;Parameterizedtype;Erasure;Software
1引言
经过了数年的研究与开发之后,Java即将支持泛型特性。
泛型技术所能带来的表达能力和安全性的增强,使得向Java中添加这一特性的呼声一直很高,最终进入了Java规范提议(JavaSpecificationRequest)的行列,被命名为JSR一14,并将于2004年初JDKl.5版本发布时正式进入Java规范中。
对这一较新的技术,本文相当全面地进行了研究。
第一部分介绍了Java的泛型语法,包括JSR一14最有特色的部分:受限类型参数;第二部分讨论了JSR一14实现泛型的方式,揭示了底层的机制;第三部分分析了JSR—14的优点和限制,并讨论了某些限制所带来的影响。
2JsR一14泛型语法
JSR一14中使用参数化类型(Pm-ameterizedType)这个术语来指代泛型化的类。
参数化类型包括一个类或者
接口c和一个类型参数列表<T1,…,"In>,其中c必须是一个参数化的类或接口,<T1,.…,Tn>中参数的个数必须与c收稿日期:2003—11—20
—--——232?--——声明的参数数量相同[1]1。
2.1参数化类型的声明
一个参数化类型的声明定义了一组类型,类型参数列表的每一个可能的实例化都是一个类型。
声明一个参数化类型的语法如下例所示:例1声明一个参数化类型
classStaekl)emo<T>i
//内部使用ArrayList来容纳对象
privateArrayList<T>theStaek;
publicStackDemo(){
the.Stack=neWArrayList<T>();
}
publicbooleanisEmpty(){
returntheStack.isEmpty();
}
publicvoidpIlsll(Telem){
theStaek.add(elem);
}
publicTpop(){
万方数据万方数据。