File tree 1 file changed +11
-2
lines changed
1 file changed +11
-2
lines changed Original file line number Diff line number Diff line change
1
+ 《《《 [ 返回首页] ( ../README.md ) <br />
2
+ 《《《 [ 上一节] ( 00_Reification.md )
3
+
1
4
## 可定义类型
2
5
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> ` ; 如果列表为空,我们将无法确定它是什么样的空列表。
4
10
5
11
在 ` Java ` 中,如果类型在运行时完全表示,即擦除不会删除任何有用的信息,那么我们说类型是可重用的。 准确地说,如果是以下类型之一,则类型是可验证的:
6
12
13
19
- 带有实际参数的参数化类型(例如 ` List<Number> ` ,` ArrayList<String> ` 或 ` Map<String,Integer> ` )
14
20
- 带有边界的参数化类型(例如 ` List<? extends Number> ` 或 ` Comparable <? super String> ` )
15
21
16
- 所以类型 ` List<? extends Object> ` 不可赋值,尽管它与 ` List<?> ` 等效。 以这种方式定义可定义类型使得它们易于在语法上识别。
22
+ 所以类型 ` List<? extends Object> ` 不可赋值,尽管它与 ` List<?> ` 等效。 以这种方式定义可定义类型使得它们易于在语法上识别。
23
+
24
+ 《《《 [ 下一节] ( 02_Instance_Tests_and_Casts.md ) <br />
25
+ 《《《 [ 返回首页] ( ../README.md )
You can’t perform that action at this time.
0 commit comments