1
1
《《《 [ 返回首页] ( README.md )
2
2
3
- # 前言
4
- Java现在支持泛型,这是自从 ` Java 1.2 ` 中增加内部类以来语言最重大的变化 - 有些人会说这是语言中最重大的变化。
3
+ ## 前言
5
4
6
- 假设你想处理列表。 有些可能是整数列表,其他列表的字符串,还有其他列表的字符串列表。 在泛型之前的 ` Java ` 中,这很简单。
5
+ ` Java ` 现在支持泛型,这是自从 ` Java 1.2 ` 中增加内部类以来语言最重大的变化 - 有些人会说这是语言中最重大的变化。
7
6
8
- 你可以用同一个类来表示所有这三个类,名为` List ` ,它具有` Object ` 类的元素
7
+ 假设你想处理列表。有些可能是整数列表,其他列表的字符串,还有其他列表的字符串列表。在泛型之前的` Java ` 中,这很简单。
8
+
9
+ 你可以用同一个类来表示所有这三个类,名为` List ` ,它具有 ` Object ` 类的元素:
9
10
10
11
```
11
12
list of integers List
@@ -30,17 +31,17 @@ list of lists of strings List<List<String>>
30
31
31
32
现在编译器会跟踪你是否有一个整数列表(或者字符串或者字符串列表),并且不需要显式的返回整数(或者字符串或者 ` List <String> ` )。
32
33
33
- 在某些方面,这与` Ada ` 中的泛型或` C++ ` 中的模板类似,但是实际的灵感来自函数式语言(如 ` ML ` 和 ` Haskell ` )中的参数多态。
34
+ 在某些方面,这与 ` Ada ` 中的泛型或 ` C++ ` 中的模板类似,但是实际的灵感来自函数式语言(如 ` ML ` 和 ` Haskell ` )中的参数多态。
34
35
35
36
本书的第一部分对泛型进行了全面的介绍。我们讨论泛型和子类型之间的相互作用,以及如何使用通配符和范围;我们描述了演变你的代码的技术;我们解释一下与演员阵
36
37
列有关的细微之处;我们处理高级主题,如泛型和安全性之间的交互,以及如何保持二进制兼容性;我们更新常见的设计模式来开发泛型。
37
38
38
39
有关泛型的文章已经写得很多,而且他们在 ` Java ` 中的引入引发了一些争议。当然,泛型的设计使它更复杂和动态化:易于演化的代码要求对象不具有描述泛型类型参
39
- 数的运行时信息,但是缺少这些信息会将一些你未注意的错误引入,诸如映射和数组创建等操作。对泛型进行权衡处理,解释如何利用自己的优势,解决弱点。
40
- 第二部分全面介绍了集合框架 。牛顿被誉为说:“如果我看到比别人更远,那是因为我站在巨人的肩膀上”。最好的程序员依这个座右铭生活着,在适当的地方建立和现有
41
- 的框架上重用代码 。 ` Java ` 集合框架为许多常见的集合类型提供了可重用的接口和实现,包括 ` list ` , ` set ` , ` queue ` , 和 ` map ` 。还有一个比较值的框架,在排
42
- 序或构建有序的树时很有用 (翻注:` Tree ` )。 (当然,并不是所有的程序员都在重复使用,正如计算机科学家汉明所说:“我们不是站在彼此的肩膀上,而是站在彼此的
43
- 脚趾上 。”)
40
+ 数的运行时信息,但是缺少这些信息会将一些你未注意的错误引入,诸如映射和数组创建等操作。对泛型进行权衡处理,解释如何利用自己的优势,解决弱点。第二部分
41
+ 全面介绍了集合框架 。牛顿被誉为说:“如果我看到比别人更远,那是因为我站在巨人的肩膀上”。最好的程序员依这个座右铭生活着,在适当的地方建立和现有的框架上
42
+ 重用代码 。 ` Java ` 集合框架为许多常见的集合类型提供了可重用的接口和实现,包括 ` list ` , ` set ` , ` queue ` , 和 ` map ` 。还有一个比较值的框架,在排序或构建
43
+ 有序的树时很有用 (翻注:` Tree ` )。 (当然,并不是所有的程序员都在重复使用,正如计算机科学家汉明所说:“我们不是站在彼此的肩膀上,而是站在彼此的脚趾
44
+ 上 。”)
44
45
45
46
由于泛型,使用集合的代码更容易阅读,编译器将捕获更多的类型错误。此外,集合提供了使用泛型的极好的例证。有人可能会说,泛型和集合是相互制造的,事实上,
46
47
集合的易用性是首先引入泛型的主要原因之一。
@@ -52,20 +53,22 @@ list of lists of strings List<List<String>>
52
53
按照通用术语,我们将 ` Java ` 的后续版本称为 ` 1.0 ` 版本到 ` 1.4 ` ,然后是 ` 5 ` 和 ` 6 ` .我们说'泛型之前的Java'通过 ` 1.4 ` 来引用 ` Java 1.0 ` ,和“泛型的
53
54
Java”来指 ` Java5 ` 和 ` Java6 ` 。
54
55
55
- Java泛型的设计受到以前许多方案的影响,特别是由Bracha,Odersky,Stoutamire和Wadler的GJ; 增加通配符GJ,由Igarashi和Viroli提出; 以及Torgersen,
56
- Hansen,Ernst,von derAhé,Bracha和Gafter的通配符的进一步发展。 在Java社区流程下由Bracha领导的团队,包括Odersky,Thorup和Wadler(作为 ` JSR14 `
57
- 和 ` JSR201 ` 的一部分)进行了泛型的设计。 Odersky的GJ编译器是 ` Sun ` 当前的 ` javac ` 编译器的基础。
56
+ ` Java ` 泛型的设计受到以前许多方案的影响,特别是由 ` Bracha ` ,` Odersky ` ,` Stoutamire ` 和 ` Wadler ` 的 ` GJ ` ; 增加通配符 ` GJ ` ,由 ` Igarashi ` 和
57
+ ` Viroli ` 提出; 以及 ` Torgersen ` ,` Hansen ` ,` Ernst ` ,` von derAhé ` ,` Bracha ` 和 ` Gafter ` 的通配符的进一步发展。 在 ` Java ` 社区流程下由 ` Bracha `
58
+ 领导的团队,包括 ` Odersky ` ,` Thorup ` 和 ` Wadler ` (作为 ` JSR14 ` 和 ` JSR201 ` 的一部分)进行了泛型的设计。` Odersky ` 的 ` GJ ` 编译器是 ` Sun ` 当前的
59
+ ` javac ` 编译器的基础。
58
60
59
- ## 获取示例程序
61
+ ### 获取示例程序
60
62
61
- 本书中的一些示例程序可以在线获取:ftp://ftp.oreilly.com/published/oreilly/javagenerics
63
+ 本书中的一些示例程序可以在线获取:` ftp://ftp.oreilly.com/published/oreilly/javagenerics `
62
64
63
- 如果您无法通过网络直接获取示例,但可以发送和接收电子邮件,你可以使用ftpmail来获取它们。 为了帮助使用` ftpmail ` ,发送邮件
64
- 到 ` [email protected] ` ,没有主题和消息正文中的单词“帮助”。
65
+ 如果您无法通过网络直接获取示例,但可以发送和接收电子邮件,你可以使用ftpmail来获取它们。 为了帮助使用` ftpmail ` ,发送邮件到
66
+ ` [email protected] ` ,没有主题和消息正文中的单词“帮助”。
65
67
66
- ## 如何联系我们
68
+ ### 如何联系我们
67
69
68
70
您可以向发布者提出关于本书的评论和问题
71
+
69
72
```
70
73
O’Reilly Media, Inc.
71
74
1005 Gravenstein Highway North
@@ -75,13 +78,13 @@ Sebastopol, CA 95472
75
78
(707) 829-0104 (fax)
76
79
```
77
80
78
- ` O’Reilly ` 有本书的网页,其中列出了勘误表和任何其他信息。您可以访问此页面:http://www.oreilly.com/catalog/javagenerics
81
+ ` O’Reilly ` 有本书的网页,其中列出了勘误表和任何其他信息。您可以访问此页面:` http://www.oreilly.com/catalog/javagenerics `
79
82
80
- 对本书发表评论或提出技术问题,发送邮件到
` [email protected] `
83
+ 对本书发表评论或提出技术问题,发送邮件到
` [email protected] `
81
84
82
- 有关书籍,会议,软件,资源中心等的更多信息,O'Reilly网络,请参阅O'Reilly网站: http://www.oreilly.com
85
+ 有关书籍,会议,软件,资源中心等的更多信息, ` O'Reilly ` 网络,请参阅 ` O'Reilly ` 网站: ` http://www.oreilly.com `
83
86
84
- ## 本书中使用的约定
87
+ ### 本书中使用的约定
85
88
86
89
我们使用以下字体和格式约定,代码以固定宽度字体显示,粗体字用于强调
87
90
@@ -105,7 +108,7 @@ assert stack.toString().equals("stack[0, 1, 2, 3]");
105
108
106
109
当代码片段出现在段落中时(如我们在前面的项目中引用主要方法时),代码片段以固定宽度字体打印。
107
110
108
- 我们经常忽略标准的引入。 使用Java集合框架的代码或其他实用程序类应该在行之前 :
111
+ 我们经常忽略标准的引入。 使用 ` Java ` 集合框架的代码或其他实用程序类应该在行之前 :
109
112
110
113
``` java
111
114
import java.util.* ;
@@ -129,43 +132,42 @@ Note: Recompile with -Xlint:unchecked for details.
129
132
for (int i = 0; i<4; i++) stack.push(new Integer(i));
130
133
```
131
134
132
- ## 使用代码示例
135
+ ### 使用代码示例
133
136
134
- 这本书是为了帮助你完成工作。 一般来说,你可以在你的程序和文档中使用这本书的代码。 你不需要联系我们除非你正在复制代码的重要部分。 例如,编写一个使用本
135
- 书中几个代码块的程序并不需要
137
+ 这本书是为了帮助你完成工作。一般来说,你可以在你的程序和文档中使用这本书的代码。你不需要联系我们除非你正在复制代码的重要部分。例如,编写一个使用本书
138
+ 中几个代码块的程序并不需要
136
139
137
- 允许。 销售或分发O'Reilly书籍的CD-ROM例子需要许可 。 引用这本书和引用的例子回答一个问题代码不需要权限。 包含大量的示例代码从本书到您的产品的文档需要
138
- 许可 。
140
+ 允许销售或分发 ` O'Reilly ` 书籍的 ` CD-ROM ` 例子需要许可 。 引用这本书和引用的例子回答一个问题代码不需要权限。 包含大量的示例代码从本书到您的产品的
141
+ 文档需要许可 。
139
142
140
- 我们建议,但不要求,归属。 标题通常包括标题,作者,出版商和ISBN 。 例如:Maurice的“Java泛型和收藏”Naftalin和Philip Wadler。 Copyright 2006
141
- O'Reilly Media,Inc.,0-596-52775-6。
143
+ 我们建议,但不要求,归属。 标题通常包括标题,作者,出版商和 ` ISBN ` 。 例如:` Maurice ` 的“ ` Java ` 泛型和收藏” ` Naftalin ` 和 ` Philip Wadler ` 。
144
+ ` Copyright 2006 O'Reilly Media,Inc.,0-596-52775-6` 。
142
145
143
- 如果您觉得您对代码示例的使用不属于合理使用或上述许可,随时联系我们在 permissions @oreilly.com 。
146
+ 如果您觉得您对代码示例的使用不属于合理使用或上述许可,随时联系 ` permissions @oreilly.com` 。
144
147
145
- ## Safari®联机丛书
148
+ ### Safari® 联机丛书
146
149
147
- 在您最喜爱的封面上看到Safari® 联机丛书图标时技术书,那就意味着这本书可以通过网上获得O'Reilly网络Safari书架 。
150
+ 在您最喜爱的封面上看到 ` Safari® ` 联机丛书图标时技术书,那就意味着这本书可以通过网上获得 ` O'Reilly ` 网络 ` Safari ` 书架 。
148
151
149
- Safari提供的解决方案比电子书更好。 这是一个虚拟图书馆,可以让你轻松搜索数以千计的高科技书籍,剪切和粘贴代码示例,下载章节,当您需要最准确,最新的信息时,快速找到答案。 在http://safari.oreilly.com免费试用。
152
+ ` Safari ` 提供的解决方案比电子书更好。 这是一个虚拟类库,可以让你轻松搜索数以千计的高科技书籍,剪切和粘贴代码示例,下载章节,当您需要最准确,最新的
153
+ 信息时,快速找到答案。 在 ` http://safari.oreilly.com ` 免费试用。
150
154
151
- ## 致谢
155
+ ### 致谢
152
156
153
- sun公司 (过去和现在)的人对回答我们的问题非常好。 他们总是乐于解释一个棘手的问题,或者仔细考虑设计的权衡。感谢Joshua Bloch, Gilad Bracha, Martin
154
- Buchholz, Joseph D. Darcy, Neal M.Gafter, Mark Reinhold, David Stoutamire, Scott Violet, 和 Peter von der Ahé.
157
+ ` sun ` 公司 (过去和现在)的人对回答我们的问题非常好。 他们总是乐于解释一个棘手的问题,或者仔细考虑设计的权衡。感谢 ` Joshua Bloch` , ` Gilad Bracha ` ,
158
+ ` Martin Buchholz` , ` Joseph D. Darcy ` , ` Neal M.Gafter ` , ` Mark Reinhold ` , ` David Stoutamire ` , ` Scott Violet ` 和 ` Peter von der Ahé ` .
155
159
156
- 与以下研究人员一起工作非常愉快Java的泛型设计: Erik Ernst, Christian Plesner Hansen, Atsushi Igarashi, Martin Odersky, Mads Torgersen, 和
157
- Mirko Viroli.
160
+ 与以下研究人员一起工作非常愉快 ` Java ` 的泛型设计: ` Erik Ernst ` , ` Christian Plesner Hansen ` , ` Atsushi Igarashi ` , ` Martin Odersky ` ,
161
+ ` Mads Torgersen ` ,和 ` Mirko Viroli ` .
158
162
159
- 我们收到了一些人的意见和帮助。感谢:Brian Goetz, David Holmes, Heinz M. Kabutz, Deepti Kalra, Angelika Langer, Stefan Liebeg, Doug Lea, Tim
160
- Munro, Steve Murphy, 和 C K Shibin.
163
+ 我们收到了一些人的意见和帮助。感谢:` Brian Goetz ` , ` David Holmes ` , ` Heinz M ` . ` Kabutz ` , ` Deepti Kalra ` , ` Angelika Langer ` , ` Stefan Liebeg ` ,
164
+ ` Doug Lea ` , ` Tim Munro` , ` Steve Murphy ` 和 ` C K Shibin ` .
161
165
162
- 我们喜欢阅读Heinz M. Kabutz的Java专家时事通讯和Angelika anger的Java泛型问答 ,都可以在线获得。
166
+ 我们喜欢阅读 ` Heinz M. Kabutz ` 的 ` Java ` 专家时事通讯和 ` Angelika anger ` 的 ` Java ` 泛型问答 ,都可以在线获得。
163
167
164
- 我们的编辑Michael Loukides总是乐于提供好的建议。 WINDOWS软件公司的Paul C. Anagnostopoulos把我们的LATEX转换成了照相软件,JeremyYallop制作了索
165
- 引。
168
+ 我们的编辑 ` Michael Loukides ` 总是乐于提供好的建议。 ` WINDOWS ` 软件公司的 ` Paul C. Anagnostopoulos ` 把我们的 ` LATEX ` 转换成了照相软件,` JeremyYallop ` 制作了索引。
166
169
167
- 我们的家人让我们保持健康(疯狂)。爱他们,Adam, Ben, Catherine, Daniel, Isaac,Joe, Leora, Lionel, 和 Ruth.
168
-
170
+ 我们的家人让我们保持健康(疯狂)。爱他们,` Adam, Ben ` , ` Catherine ` , ` Daniel ` , ` Isaac ` ,` Joe ` ,` Leora ` ,` Lionel ` 和 ` Ruth ` .
169
171
170
172
《《《 [ 下一节] ( ch01/00_Introduction.md ) <br />
171
173
《《《 [ 返回首页] ( README.md )
0 commit comments