- 0
- 0
- 约6.95千字
- 约 10页
- 2017-05-04 发布于四川
- 举报
Java泛型简明的教程
导读:本文是从《 HYPERLINK /2011/04/java-generics-quick-tutorial.html Java Generics Quick Tutorial》这篇文章翻译而来,译文来自外刊IT评论《 HYPERLINK /2011/06/03/java-generics-quick-tutorial/ \t _blank Java泛型简明教程》。内容如下:
泛型是Java SE 5.0中引入的一项特征,自从这项语言特征出现多年来,我相信,几乎所有的Java程序员不仅听说过,而且使用过它。关于Java泛型的教程,免费的,不免费的,有很多。我遇到的最好的教材有:
HYPERLINK /javase/tutorial/ The Java Tutorial
HYPERLINK http://bit.ly/jAzfIt Java Generics and Collections, by Maurice Naftalin and Philip Wadler
HYPERLINK http://goo.gl/ixwNn Effective Java中文版(第2版), by Joshua Bloch.
尽管有这么多丰富的资料,有时我感觉,有很多的程序员仍然不太明白Java泛型的功能和意义。这就是为什么我想使用一种最简单的形式来总结一下程序员需要知道的关于Java泛型的最基本的知识。
Java泛型由来的动机
理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作:
ListApple?box?=?...;? ?
Apple?apple?=?box.get(0);? ?
上面的代码自身已表达的很清楚:box是一个装有Apple对象的List。get方法返回一个Apple对象实例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样:
List?box?=?...;? ?
Apple?apple?=?(Apple)?box.get(0);? ?
很明显,泛型的主要好处就是让编译器保留参数的类型信息,执行类型检查,执行类型转换操作:编译器保证了这些类型转换的绝对无误。
相对于依赖程序员来记住对象类型、执行类型转换——这会导致程序运行时的失败,很难调试和解决,而编译器能够帮助程序员在编译时强制进行大量的类型检查,发现其中的错误。
泛型的构成
由泛型的构成引出了一个类型变量的概念。根据Java语言规范,类型变量是一种没有限制的标志符,产生于以下几种情况:
泛型类声明
泛型接口声明
泛型方法声明
泛型构造器(constructor)声明
泛型类和接口
如果一个类或接口上有一个或多个类型变量,那它就是泛型。类型变量由尖括号界定,放在类或接口名的后面:
public?interface?ListT?extends?CollectionT?{? ?
?
...? ?
}? ?
简单的说,类型变量扮演的角色就如同一个参数,它提供给编译器用来类型检查的信息。
Java类库里的很多类,例如整个Collection框架都做了泛型化的修改。例如,我们在上面的第一段代码里用到的List接口就是一个泛型类。在那段代码里,box是一个ListApple对象,它是一个带有一个Apple类型变量的List接口的类实现的实例。编译器使用这个类型变量参数在get方法被调用、返回一个Apple对象时自动对其进行类型转换。
实际上,这新出现的泛型标记,或者说这个List接口里的get方法是这样的:
T?get(int?index);? ?
get方法实际返回的是一个类型为T的对象,T是在ListT声明中的类型变量。
泛型方法和构造器(Constructor)
非常的相似,如果方法和构造器上声明了一个或多个类型变量,它们也可以泛型化。
public?static?t?T?getFirst(ListT?list)? ?
这个方法将会接受一个ListT类型的参数,返回一个T类型的对象。
例子
你既可以使用Java类库里提供的泛型类,也可以使用自己的泛型类。
类型安全的写入数据…
下面的这段代码是个例子,我们创建了一个ListString实例,然后装入一些数据:
ListString?str?=?new?ArrayListString();? ?
?
str.add(Hello?);? ?
?
str.add(World.);? ?
如果我们试图在ListString装入另外一种对象,编译器就会提示错误:
str.add(1);?//不能编译? ?
类型安全的读取数据…
当我们在使用ListString对象时,它总能保证我们得到的是一个String对象:
String?myStri
您可能关注的文档
- GRM31CR60J107ME39L中文资料.docx
- GT7C5_3型润药机验证方案.doc
- GSM层3信令解释.doc
- GSM直放站和室内覆盖工程验收标准.doc
- Guabms山东农业university.doc
- GUI的设计师个人简历模板.doc
- GSP实训项目的设计的方案.doc
- GUI学生的管理界面的设计.doc
- Gwiyomisong中韩歌词.docx
- GW_1总经理岗位职责.doc
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
最近下载
- 黑龙江省园林绿化工程消耗量定额2024版.docx VIP
- N—乙酰氨基葡萄糖合成方法的改进.pdf VIP
- L-CKC L-CKC 220工业闭式齿轮油 工业润滑剂 220 说明书.pdf
- 2025年春人教版历史七年级下册全册教学课件.pptx
- 自考14653《证券投资理论与实务》高频考点串讲.docx VIP
- 2026年湖南安全技术职业学院单招职业技能考试题库及完整答案详解一套.docx VIP
- 新城商开事业部产品配置标准及成本控制手册(2020版).pdf VIP
- 四川大学《通信原理》期末试题B卷.docx VIP
- 2024年度实验室CNAS内审全套资料.pptx VIP
- 2026年度护理人员培训计划(两篇).docx VIP
原创力文档

文档评论(0)