File tree 1 file changed +9
-8
lines changed
1 file changed +9
-8
lines changed Original file line number Diff line number Diff line change 24
24
assert s. equals(" Hello world!" );
25
25
```
26
26
- 如果没有泛型,则省略类型参数,但只要从列表中提取元素,就必须显式地转换。
27
- - 事实上,从上面两个来源编译的字节码将是相同的。 我们说泛型是通过擦除来实现的,因为类型` List<Integer> ` ,` List<String> ` 和` List<List<String> ` 都在运行时由相同的类型,列表。 我们还使用擦除来描述将第一个程序转换为的过程
28
- 第二。 术语擦除是一个轻微的误称,因为该过程擦除了类型参数但增加了代码。
29
- - 泛型隐式执行没有泛型明确执行的相同的强制转换。如果这样的转换可能会失败,则可能很难调试使用泛型编写的代码。 这是为什么可以肯定的是,泛型具有以下保证:
30
- ```
31
- 保证:通过泛型编译添加的隐式转换从不失败。
32
- ```
27
+ - 事实上,从上面两个来源编译的字节码将是相同的。 我们说泛型是通过擦除来实现的,因为类型` List<Integer> ` ,` List<String> ` 和` List<List<String> ` 都在
28
+ 运行时由相同的类型` List ` 。 我们还使用“类型擦除”来描述将第一个程序转换为第二个程序的过程。术语擦除是一个轻微的误称,因为该过程擦除了类型参数但增加了
29
+ 代码。
30
+ - 泛型隐式执行没有泛型明确执行的相同的强制转换。如果使用这样转换可能会失败,可能很难调试使用泛型编写的代码。 这就是为什么可以肯定泛型具有以下保证:
31
+ > 保证:通过泛型编译添加的隐式转换从不失败。
33
32
- 这个保证也有一些细小的瑕疵:只有在没有检查的情况下才适用编译器发出警告。 后来我们会详细讨论一下导致发出未经检查的警告以及如何最小化其影响。
34
- - 通过擦除实现泛型有一些重要的影响。 它保持的东西简单,在泛型不添加任何根本的新东西。 它事代码变得简单,因为` List ` 只有一个实现,而不是每个类型的一个版本。 和它简化了进化,因为可以在非泛型和泛型中访问同一个库形式。
35
- - 最后一点值得一些阐述。 这意味着你不会由于维护两个版本的库而烦恼:一个非通用的旧版本的作品与` Java1.4 ` 或更早版本,以及与` Java5 ` 和` 6 ` 一起工作的通用版本字节码级别,与不使用泛型的代码看起来一样。
33
+ - 通过实现泛型擦除有一些重要的影响。 它保持的东西简单,在泛型不添加任何根本的新东西。 它使代码变得简单,因为` List ` 只有一个实现,而不是每个类型的一个
34
+ 版本。 和它简化了进化,因为可以在非泛型和泛型中访问同一个库形式。
35
+ - 最后一点值得一些阐述。 这意味着你不会由于维护两个版本的库而烦恼:一个非通用的旧版本的作品与` Java1.4 ` 或更早版本,以及与` Java5 ` 和` 6 ` 一起工作的通用
36
+ 版本字节码级别,与不使用泛型的代码看起来一样。
36
37
无需一次切换到泛型,只需更新即可演变您的代码一个程序包,一个类或一个方法开始使用泛型。 我们甚至解释您如何可以为遗留代码声明泛型类型。 (当然,仅保证当您添加与传统代码相匹配的泛型类型时,上述提及才有效。)
37
38
- 通过擦除来实现泛型的另一个结果是数组类型不同参数化类型的关键方法。执行
38
39
``` java
You can’t perform that action at this time.
0 commit comments