Skip to content

Commit 00f828f

Browse files
authored
Update 01_Reifiable_Types.md
1 parent 220463a commit 00f828f

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

ch06/01_Reifiable_Types.md

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
《《《 [返回首页](../README.md) <br/>
2+
《《《 [上一节](00_Reification.md)
3+
14
## 可定义类型
25

3-
`Java` 中,数组的类型是用其组件类型来表示的,而参数化类型的类型是在没有其类型参数的情况下被指定的。 例如,一个数组的数组将带有指定类型 `Number []`,而一个数字列表将带有指定类型 `ArrayList`,而不是 `ArrayList<Number>`; 原始类型,而不是参数化类型被通用化。 当然,列表中的每个元素都会附加一个指定类型 - 比如整数或双精度 - 但这与指定参数类型并不相同。 如果列表中的每个元素都是整数,我们将无法判断是否有 `ArrayList<Integer>``ArrayList<Number>``ArrayList<Object>`; 如果列表为空,我们将无法确定它是什么样的空列表。
6+
`Java` 中,数组的类型是用其组件类型来表示的,而参数化类型的类型是在没有其类型参数的情况下被指定的。 例如,一个数组的数组将带有指定类型
7+
`Number []`,而一个数字列表将带有指定类型 `ArrayList`,而不是 `ArrayList<Number>`; 原始类型,而不是参数化类型被通用化。 当然,列表中的每个元素都会附
8+
加一个指定类型 - 比如整数或双精度 - 但这与指定参数类型并不相同。 如果列表中的每个元素都是整数,我们将无法判断是否有 `ArrayList<Integer>`
9+
`ArrayList<Number>``ArrayList<Object>`; 如果列表为空,我们将无法确定它是什么样的空列表。
410

511
`Java` 中,如果类型在运行时完全表示,即擦除不会删除任何有用的信息,那么我们说类型是可重用的。 准确地说,如果是以下类型之一,则类型是可验证的:
612

@@ -13,4 +19,7 @@
1319
- 带有实际参数的参数化类型(例如 `List<Number>``ArrayList<String>``Map<String,Integer>`
1420
- 带有边界的参数化类型(例如 `List<? extends Number>``Comparable <? super String>`
1521

16-
所以类型 `List<? extends Object>` 不可赋值,尽管它与 `List<?>` 等效。 以这种方式定义可定义类型使得它们易于在语法上识别。
22+
所以类型 `List<? extends Object>` 不可赋值,尽管它与 `List<?>` 等效。 以这种方式定义可定义类型使得它们易于在语法上识别。
23+
24+
《《《 [下一节](02_Instance_Tests_and_Casts.md) <br/>
25+
《《《 [返回首页](../README.md)

0 commit comments

Comments
 (0)