Skip to content

Commit 2f476b4

Browse files
authored
Update 02_Reflected_Types_are_Reifiable_Types.md
1 parent 7f4cfc7 commit 2f476b4

File tree

1 file changed

+13
-35
lines changed

1 file changed

+13
-35
lines changed
Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
《《《 [返回首页](../README.md) <br/>
2+
《《《 [上一节](01_Generics_for_Reflection.md)
3+
14
## 反射类型是可维持类型
25

36
反思使程序可以使用物化类型信息。 因此,必要的是,每个类别标记对应于可确定类型。 如果您尝试反映参数化类型,则会获得相应原始类型的指定信息:
@@ -11,17 +14,20 @@
1114

1215
这里整型的类型列表和字符串的类型列表都由同一个类标记表示,其中的类文字被写入 `ArrayList.class`
1316

14-
由于该类始终表示可重用类型,因此使用不可赋予的类型对类 `Class` 进行参数化没有意义。 因此,使用类型参数生成类的两种主要方法(即 `getClass` 方法和类文本)都被设计为在所有情况下都为类型参数生成可重用类型。
17+
由于该类始终表示可重用类型,因此使用不可赋予的类型对类 `Class` 进行参数化没有意义。 因此,使用类型参数生成类的两种主要方法(即 `getClass` 方法和类
18+
文本)都被设计为在所有情况下都为类型参数生成可重用类型。
1519

16-
回想一下,编译器专门处理了 `getClass` 方法。 一般来说,如果表达式 `e` 的类型为 `T`,则表达式 `e.getClass()` 的类型为 `Class<extends | T |>`,其中 `| T |` 是类型 `T` 的删除。 这是一个例子:
20+
回想一下,编译器专门处理了 `getClass` 方法。 一般来说,如果表达式 `e` 的类型为 `T`,则表达式 `e.getClass()` 的类型为 `Class<extends | T |>`,其
21+
`| T |` 是类型 `T` 的删除。 这是一个例子:
1722

1823
```java
1924
List<Integer> ints = new ArrayList<Integer>();
2025
Class<? extends List> k = ints.getClass();
2126
assert k == ArrayList.class;
2227
```
2328

24-
这里表达式 `int` 具有 `List<Integer>` 类型,所以表达式 `int.getClass()` 的类型为 `Class <? extends List>`; 这是因为擦除 `List<Integer>` 会生成原始类型 `List``k` 的实际值是 `ArrayList.class`,它的类型为 `Class<ArrayList>`,它确实是 `Class<? extends List>` 的子类型。
29+
这里表达式 `int` 具有 `List<Integer>` 类型,所以表达式 `int.getClass()` 的类型为 `Class <? extends List>`; 这是因为擦除 `List<Integer>` 会生
30+
成原始类型 `List``k` 的实际值是 `ArrayList.class`,它的类型为 `Class<ArrayList>`,它确实是 `Class<? extends List>` 的子类型。
2531

2632
类文字也受到限制; 在类文字中为类型提供类型参数甚至在语法上都是无效的。 因此,以下片段是非法的:
2733

@@ -51,38 +57,10 @@
5157

5258
解析器在这个短语中遇到了很多麻烦,当它到达文件末尾时仍然感到困惑!
5359

54-
此语法问题导致不规则。 在需要可调整类型的其他位置,您可以提供原始类型(例如 `List`)或带有无限制通配符(例如 `List<?>`)的参数化类型。 但是,对于类别令牌,您必须提供原始类型; 甚至不会出现无界的通配符。 在前面的代码中用 `List<?>替换 `List<Integer>` 会导致类似的错误级联。
60+
此语法问题导致不规则。 在需要可调整类型的其他位置,您可以提供原始类型(例如 `List`)或带有无限制通配符(例如 `List<?>`)的参数化类型。 但是,对于类
61+
别令牌,您必须提供原始类型; 甚至不会出现无界的通配符。 在前面的代码中用 `List<?>替换 `List<Integer>` 会导致类似的错误级联。
5562

5663
对类别标记的限制导致一个有用的属性。 无论何处出现类型为 `Class<T>` 的类型,类型 `T` 都应该是可重用的类型。 对于 `T[]` 形式的类型也是如此.
5764

58-
59-
60-
61-
62-
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-
65+
《《《 [下一节](03_Reflection_for_Primitive_Types.md) <br/>
66+
《《《 [返回首页](../README.md)

0 commit comments

Comments
 (0)