Skip to content

Commit 6a631ab

Browse files
authored
Update 07_Bridges.md
1 parent 01ce27a commit 6a631ab

File tree

1 file changed

+18
-44
lines changed

1 file changed

+18
-44
lines changed

ch03/07_Bridges.md

Lines changed: 18 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
1+
《《《 [返回首页](../README.md) <br/>
2+
《《《 [上一节](06_Multiple_Bounds.md)
3+
14
## 桥梁
25

3-
正如我们前面提到的,泛型是通过擦除来实现的:当你用泛型编写代码时,它的编译方式几乎与没有泛型编写的代码完全相同。在参数化接口(如 `Comparable<T>`)的情况下,这可能会导致编译器插入其他方法;这些附加的方法被称为网桥。
6+
正如我们前面提到的,泛型是通过擦除来实现的:当你用泛型编写代码时,它的编译方式几乎与没有泛型编写的代码完全相同。在参数化接口(如 `Comparable<T>`)的
7+
情况下,这可能会导致编译器插入其他方法;这些附加的方法被称为网桥。
48

5-
示例 `3-6` 显示了 `Comparable` 接口以及泛型之前的 `Java` 中的 `Integer` 类的简化版本。在非通用接口中,`compareTo` 方法接受一个 `Object` 类型的参数。在非泛型类中,有两个 `compareTo` 方法。第一个是您可能期望的简单方法,用于将整数与另一个整数进行比较。第二个将整数与任意对象进行比较:它将该对象转换为整数并调用第一个方法。第二种方法对于重写 `Comparable` 接口中的 `compareTo` 方法是必需的,因为只有当方法签名相同时才会覆盖。这第二种方法被称为桥梁。
9+
示例 `3-6` 显示了 `Comparable` 接口以及泛型之前的 `Java` 中的 `Integer` 类的简化版本。在非通用接口中,`compareTo` 方法接受一个 `Object` 类型的
10+
参数。在非泛型类中,有两个 `compareTo` 方法。第一个是您可能期望的简单方法,用于将整数与另一个整数进行比较。第二个将整数与任意对象进行比较:它将该对
11+
象转换为整数并调用第一个方法。第二种方法对于重写 `Comparable` 接口中的 `compareTo` 方法是必需的,因为只有当方法签名相同时才会覆盖。这第二种方法被称
12+
为桥梁。
613

7-
`3-7` 显示了当 `Comparable` 接口和 `Integer` 类被基因化时发生了什么。在通用接口中,`compareTo` 方法接受 `T` 类型的参数。在泛型类中,单个 `compareTo` 方法接受 `Integer` 类型的参数。
14+
`3-7` 显示了当 `Comparable` 接口和 `Integer` 类被基因化时发生了什么。在通用接口中,`compareTo` 方法接受 `T` 类型的参数。在泛型类中,单个
15+
`compareTo` 方法接受 `Integer` 类型的参数。
816

917
桥接方法由编译器自动生成。 事实上,这两个示例的编译版本的代码基本相同。
1018

11-
例3-6。 传统的可比较整数的代码
19+
`3-6`。 传统的可比较整数的代码
1220

1321
```java
1422
interface Comparable {
@@ -26,7 +34,7 @@
2634
}
2735
```
2836

29-
例3-7。 可比较整数的通用代码
37+
`3-7`。 可比较整数的通用代码
3038

3139
```java
3240
interface Comparable<T> {
@@ -49,51 +57,17 @@
4957
System.out.println(m.toGenericString());
5058
```
5159

52-
在通用版本的Integer类上运行此代码会产生以下输出
60+
在通用版本的 `Integer` 类上运行此代码会产生以下输出
5361

5462
```java
5563
public int Integer.compareTo(Integer)
5664
public bridge int Integer.compareTo(java.lang.Object)
5765
```
5866

59-
这确实包含两种方法,一种是采用 `Integer` 类型参数的声明方法,另一种是采用 `Object` 类型参数的桥接方法。 (截至撰写本文时,`Sun JVM` 打印的是 `volatile` 而不是 `bridge`,因为`Java` 字节码中用于指示网桥方法的位也用于指示易失性字段;预计此错误将在未来版本中得到修复。)
67+
这确实包含两种方法,一种是采用 `Integer` 类型参数的声明方法,另一种是采用 `Object` 类型参数的桥接方法。 (截至撰写本文时,`Sun JVM` 打印的是
68+
`volatile` 而不是 `bridge`,因为`Java` 字节码中用于指示网桥方法的位也用于指示易失性字段;预计此错误将在未来版本中得到修复。)
6069

6170
将旧版代码转换为使用泛型时,网桥可以发挥重要作用; 见 `8.4` 节。
6271

63-
64-
65-
66-
67-
68-
69-
70-
71-
72-
73-
74-
75-
76-
77-
78-
79-
80-
81-
82-
83-
84-
85-
86-
87-
88-
89-
90-
91-
92-
93-
94-
95-
96-
97-
98-
99-
72+
《《《 [下一节](08_Covariant_Overriding.md) <br/>
73+
《《《 [返回首页](../README.md)

0 commit comments

Comments
 (0)