File tree Expand file tree Collapse file tree 1 file changed +5
-6
lines changed Expand file tree Collapse file tree 1 file changed +5
-6
lines changed Original file line number Diff line number Diff line change 3
3
4
4
## 反射的泛型
5
5
6
- ` Java ` 支持自 ` 1.0 ` 版以来的反射以及 ` 1.1 ` 版以后的类文字。 它们的核心是 ` Class ` 类,它表示运行时对象类型的信息。 您可以编写一个类型,后跟 ` .class ` 作为文字,表示与该类型相对应的类标记,并且方法 ` getClass ` 在每个对象上定义并返回一个类标记,该标记表示该对象在运行时携带的特定类型信息。 这里是一个例子:
6
+ ` Java ` 支持自 ` 1.0 ` 版以来的反射以及 ` 1.1 ` 版以后的类文字。 它们的核心是 ` Class ` 类,它表示运行时对象类型的信息。 您可以编写一个类型,后跟 ` .class ` 作为文字,表示与该类型相对应的类标记,并且方法 ` getClass ` 在每个对象上定义并返回一个类标记,该标记表示该对象在运行时携带的特定类型信息。这里是一个例子:
7
7
8
8
``` java
9
9
Class ki = Integer . class;
55
55
Retention r = k. getAnnotation(Retention . class);
56
56
```
57
57
58
- 这种通用类型具有两个优点。 首先,这意味着调用结果不需要强制转换,因为泛型类型系统可以精确地指定正确的类型。 其次,这意味着如果您不小心使用类标记调用不是 ` Annotation ` 子类的类的方法,那么会在编译时而不是在运行时检测到。
58
+ 这种通用类型具有两个优点。 首先,这意味着调用结果不需要强制转换,因为泛型类型系统可以精确地指定正确的类型。其次,这意味着如果您不小心使用类标记调用不是 ` Annotation ` 子类的类的方法,那么会在编译时而不是在运行时检测到。
59
59
60
60
类标记的另一种用法类似于注释类,它出现在 ` java.awt ` 包的 ` Component ` 类的 ` getListeners ` 方法中:
61
61
62
62
``` java
63
- public < T extends EventListener >
64
- T [] getListeners(Class<T > listenerType);
63
+ public < T extends EventListener > T [] getListeners(Class<T > listenerType);
65
64
```
66
65
67
66
同样,这意味着 ` getListeners ` 的代码不需要强制转换,这意味着编译器可以检查该方法是否使用适当类型的类标记调用。
68
67
69
- 作为类标记的一个有趣用法的最后一个示例,便捷类 ` Collections ` 包含一个构建包装的方法,该包装检查添加到给定列表或从给定列表中提取的每个元素是否属于给定类。 (其他集合类也有类似的方法,例如集合和地图。)它具有以下签名:
68
+ 作为类标记的一个有趣用法的最后一个示例,便捷类 ` Collections ` 包含一个构建包装的方法,该包装检查添加到给定列表或从给定列表中提取的每个元素是否属于给定类。(其他集合类也有类似的方法,例如集合和地图。)它具有以下签名:
70
69
71
70
``` java
72
71
public static < T > List<T > checkedList(List<T > l, Class<T > k)
73
72
```
74
73
75
- 包装在编译时通过动态检查来补充静态检查,这对于提高安全性或与遗留代码的接口(见第 ` 8.1 ` 节)可能很有用。 该实现调用前面描述的类 ` Class ` 中的方法,其中接收方是传递到方法中的类标记,并且该转换将应用于使用 ` get ` ,` set ` 或 ` add ` 添加到列表中的任何元素,或者将其写入列表中。 然而,` Class<T> ` 的类型参数意味着 ` checkedList ` 的代码不需要额外的转换(除了调用类类中的 ` cast ` 方法外),并且编译器可以检查该方法是否使用类标记调用 一个合适的类型。
74
+ 包装在编译时通过动态检查来补充静态检查,这对于提高安全性或与遗留代码的接口(见第 ` 8.1 ` 节)可能很有用。该实现调用前面描述的类 ` Class ` 中的方法,其中接收方是传递到方法中的类标记,并且该转换将应用于使用 ` get ` ,` set ` 或 ` add ` 添加到列表中的任何元素,或者将其写入列表中。然而,` Class<T> ` 的类型参数意味着 ` checkedList ` 的代码不需要额外的转换(除了调用类类中的 ` cast ` 方法外),并且编译器可以检查该方法是否使用类标记调用 一个合适的类型。
76
75
77
76
《《《 [ 下一节] ( 02_Reflected_Types_are_Reifiable_Types.md ) <br />
78
77
《《《 [ 返回首页] ( ../README.md )
You can’t perform that action at this time.
0 commit comments