Skip to content

Commit e68c281

Browse files
committed
添加前后链接
1 parent 97b4d3e commit e68c281

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

ch07/00_Reflection.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
《《《 [返回首页](../README.md) <br/>
2+
《《《 [上一节](../ch06/10_Summing_Up.md)
3+
14
## 反射
25

3-
反射是一组功能的术语,它允许程序检查自己的定义。 `Java` 中的反射在类浏览器,对象检查器,调试器,解释器,服务(如 `JavaBeans™ 和对象序列化)以及任何创建,检查或操作任意Java对象的工具中发挥作用。
6+
反射是一组功能的术语,它允许程序检查自己的定义。 `Java` 中的反射在类浏览器,对象检查器,调试器,解释器,服务(如 `JavaBeans™` 和对象序列化)以及任何创建,检查或操作任意Java对象的工具中发挥作用。
47

58
`Java` 自一开始就出现了反射,但泛型的出现改变了反射的两种重要方式,即为泛型的反射和反射引入了泛型。
69

710
通过泛型来进行反射,我们指的是用于反射的一些类型现在是泛型类型。特别是,类 `Class` 成为泛型类 `Class<T>`。这看起来可能会让人感到困惑,但一旦明白它可以使得使用反射的程序更加清晰。类文字和方法 `Object.getClass` 使用特殊技巧来返回更精确的类型信息。泛型被用来在注释的反映中特别有效。我们观察到 `Class<T>` 中的类型参数 `T` 应该总是绑定到一个可定义类型,并且我们提供一个简短的库,可以帮助您避免许多常见的未经检查的强制转换。
811

912
通过对泛型的反思,我们的意思是反射现在返回有关泛型的信息。有一些新的接口可以表示泛型类型,包括类型变量,参数化类型和通配符类型,还有一些新的方法可以获得泛型类型的字段,构造函数和方法。
1013

11-
我们依次解释每一个点。我们不承担任何以前的反思知识,但我们专注于与泛型相关的方面。
14+
我们依次解释每一个点。我们不承担任何以前的反思知识,但我们专注于与泛型相关的方面。
15+
16+
《《《 [下一节](01_Generics_for_Reflection.md) <br/>
17+
《《《 [返回首页](../README.md)

ch07/01_Generics_for_Reflection.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
《《《 [返回首页](../README.md) <br/>
2+
《《《 [上一节](00_Reflection.md)
3+
14
## 反射的泛型
25

3-
`Java` 支持自 `1.0` 版以来的反射以及 `1.1` 版以后的类文字。 它们的核心是 `Class` 类,它表示运行时对象类型的信息。 您可以编写一个类型,后跟 `.class` 作为文字,表示与该类型相对应的类标记,并且方法 `getClass`在每个对象上定义并返回一个类标记,该标记表示该对象在运行时携带的特定类型信息。 这里是一个例子:
6+
`Java` 支持自 `1.0` 版以来的反射以及 `1.1` 版以后的类文字。 它们的核心是 `Class` 类,它表示运行时对象类型的信息。 您可以编写一个类型,后跟 `.class` 作为文字,表示与该类型相对应的类标记,并且方法 `getClass` 在每个对象上定义并返回一个类标记,该标记表示该对象在运行时携带的特定类型信息。 这里是一个例子:
47

58
```java
69
Class ki = Integer.class;
@@ -9,9 +12,9 @@
912
assert ki == kn;
1013
```
1114

12-
对于给定的类加载器,相同的类型总是由相同的类标记表示。为了强调这一点,在这里我们使用标识符(==运算符)比较类标记。但是,在大多数情况下,使用相等 等于方法)。
15+
对于给定的类加载器,相同的类型总是由相同的类标记表示。为了强调这一点,在这里我们使用标识符(`==` 运算符)比较类标记。但是,在大多数情况下,使用相等 等于方法)。
1316

14-
`Java 5` 中的一个变化是 `Class` 类现在接受一个类型参数,所以 `Class <T>是类型T的类标记的类型。 前面的代码现在写成如下所示:
17+
`Java 5` 中的一个变化是 `Class` 类现在接受一个类型参数,所以 `Class <T>` 是类型 `T` 的类标记的类型。 前面的代码现在写成如下所示:
1518

1619
```java
1720
Class<Integer> ki = Integer.class;
@@ -54,7 +57,7 @@
5457

5558
这种通用类型具有两个优点。 首先,这意味着调用结果不需要强制转换,因为泛型类型系统可以精确地指定正确的类型。 其次,这意味着如果您不小心使用类标记调用不是 `Annotation` 子类的类的方法,那么会在编译时而不是在运行时检测到。
5659

57-
类标记的另一种用法类似于注释类,它出现在 `java.awt` 包的 `Component` 类的 `getListeners`` 方法中:
60+
类标记的另一种用法类似于注释类,它出现在 `java.awt` 包的 `Component` 类的 `getListeners` 方法中:
5861

5962
```java
6063
public <T extends EventListener>
@@ -71,6 +74,8 @@
7174

7275
包装在编译时通过动态检查来补充静态检查,这对于提高安全性或与遗留代码的接口(见第 `8.1` 节)可能很有用。 该实现调用前面描述的类 `Class` 中的方法,其中接收方是传递到方法中的类标记,并且该转换将应用于使用 `get``set``add` 添加到列表中的任何元素,或者将其写入列表中。 然而,`Class<T>` 的类型参数意味着 `checkedList` 的代码不需要额外的转换(除了调用类类中的 `cast` 方法外),并且编译器可以检查该方法是否使用类标记调用 一个合适的类型。
7376

77+
《《《 [下一节](02_Reflected_Types_are_Reifiable_Types.md) <br/>
78+
《《《 [返回首页](../README.md)
7479

7580

7681

0 commit comments

Comments
 (0)