Skip to content

Commit 3bd5f2a

Browse files
committed
修改菜单层级
1 parent 9170146 commit 3bd5f2a

9 files changed

+12
-12
lines changed

ch02/08_Restrictions_on_Wildcards.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](07_Wildcard_Capture.md)
33

4+
### 对通配符的限制
5+
46
通配符可能不会出现在类实例创建表达式(新建)的顶层,泛型方法调用中的显式类型参数或超类型(扩展和实现)中。
57

68
**实例创建**在类实例创建表达式中,如果类型是参数化类型,则没有任何类型参数可能是通配符。 例如,以下是非法的:
@@ -10,8 +12,7 @@
1012
Map<String, ? extends Number> map = new HashMap<String, ? extends Number>(); // 编译报错
1113
```
1214

13-
这通常不是困难。 `Get``Put` 原则告诉我们,如果一个结构体包含通配符,那么我们只应该从中得到值(如果它是一个扩展通配符)或者只将值放入它中(如果它
14-
是一个超级通配符)。 为了使结构有用,我们必须同时做到这两点。 因此,我们通常以精确的类型创建结构,即使我们使用通配符类型将值放入或从结构中获取值,如
15+
这通常不是困难。 `Get``Put` 原则告诉我们,如果一个结构体包含通配符,那么我们只应该从中得到值(如果它是一个扩展通配符)或者只将值放入它中(如果它是一个超级通配符)。 为了使结构有用,我们必须同时做到这两点。 因此,我们通常以精确的类型创建结构,即使我们使用通配符类型将值放入或从结构中获取值,如
1516
下例所示:
1617

1718
```java
@@ -36,8 +37,7 @@
3637
即使列表的列表是以通配符类型创建的,其中的每个单独列表都有一个特定的类型:第一个列表是整数列表,第二个列表是字符串列表。 通配符类型禁止我们将内部列表
3738
中的元素作为 `Object` 以外的任何类型提取,但由于这是 `toString` 使用的类型,因此此代码的类型很好。
3839

39-
记住限制的一种方式是通配符和普通类型之间的关系类似于接口和类通配符之间的关系,接口更普遍,普通类型和类更具体,实例创建需要更具体的信息。 考虑以下三条
40-
陈述:
40+
记住限制的一种方式是通配符和普通类型之间的关系类似于接口和类通配符之间的关系,接口更普遍,普通类型和类更具体,实例创建需要更具体的信息。 考虑以下三条陈述:
4141

4242
```java
4343
List<?> list = new ArrayList<Object>(); // ok

ch03/00_Comparison_and_Bounds.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](../ch02/08_Restrictions_on_Wildcards.md)
33

4-
## 比较和界限
4+
### 比较和界限
55

66
现在我们已经掌握了基本知识,让我们看看泛型的一些更高级的用法。本章介绍用于支持元素比较的接口 `Comparable <T>``Comparator <T>`。 例如,如果要查找
77
集合的最大元素或对列表进行排序,这些接口很有用。 一路上,我们将介绍类型变量的界限,这是泛型的一个重要特性,与 `Comparable <T>` 界面结合使用特别有用。

ch03/07_Bridges.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](06_Multiple_Bounds.md)
33

4-
## 桥梁
4+
### 桥梁
55

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

ch03/08_Covariant_Overriding.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](07_Bridges.md)
33

4-
## 协变覆盖
4+
### 协变覆盖
55

66
`Java 5` 支持协变方法重写。 这个特性与泛型没有直接关系,但我们在这里提到它,因为它值得了解,并且因为它使用了上一节中描述的桥接技术来实现。
77

ch04/00_Declarations.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](../ch03/08_Covariant_Overriding.md)
33

4-
# 声明
4+
## 声明
55

66
本章讨论如何声明一个通用类。 它描述了构造函数,静态成员和嵌套类,它填补了擦除工作的一些细节。
77

ch04/01_Constructors.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](00_Declarations.md)
33

4-
## 构造函数
4+
### 构造函数
55

66
在泛型类中,类型参数出现在声明类的头中,但不在构造函数中:
77

ch04/02_Static_Members.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](01_Constructors.md)
33

4-
## 静态成员
4+
### 静态成员
55

66
因为泛型是通过擦除编译的,所以在运行时类`List<Integer>``List<String>``List<List<String>>` 全部由一个类实现,即 `List`。你可以看到这个使用
77
反射:

ch04/03_Nested_Classes.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](02_Static_Members.md)
33

4-
## 嵌套类
4+
### 嵌套类
55

66
`Java` 允许将一个类嵌套在另一个类中。 如果外部类具有类型参数,并且内部类不是静态的,则外部类的类型参数在内部类中可见。
77

ch04/04_How_Erasure_Works.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
《《《 [返回首页](../README.md) <br/>
22
《《《 [上一节](03_Nested_Classes.md)
33

4-
## 擦除的工作原理
4+
### 擦除的工作原理
55

66
擦除类型的定义如下:从参数化类型中删除所有类型参数,并用删除它的边界来替换任何类型变量,或者如果它没有边界,则使用 `Object`;或者如果它具有最左边界
77
的删除多边界。 这里有些例子:

0 commit comments

Comments
 (0)