|
9 | 9 | 回想一下第 `2.5` 节中的这个例子。
|
10 | 10 |
|
11 | 11 | ```java
|
12 |
| - Integer[] ints = new Integer[] {1,2,3}; |
13 |
| - Number[] nums = ints; |
14 |
| - nums[2] = 3.14; // 数组存储异常 |
| 12 | +Integer[] ints = new Integer[] {1,2,3}; |
| 13 | +Number[] nums = ints; |
| 14 | +nums[2] = 3.14; // 数组存储异常 |
15 | 15 | ```
|
16 | 16 |
|
17 | 17 | 第一行分配一个新数组,其中指定它是一个整数数组。 第二行将此数组赋给一个包含数字数组的变量; 这是允许的,因为与泛型类型不同,数组是协变的。 第三行的赋
|
|
23 | 23 | 考虑以下(不正确)代码将集合转换为数组:
|
24 | 24 |
|
25 | 25 | ```java
|
26 |
| - import java.util.*; |
27 |
| - class Annoying { |
28 |
| - public static <T> T[] toArray(Collection<T> c) { |
29 |
| - T[] a = new T[c.size()]; // 编译错误 |
30 |
| - int i=0; for (T x : c) a[i++] = x; |
31 |
| - return a; |
32 |
| - } |
33 |
| - } |
| 26 | +import java.util.*; |
| 27 | + class Annoying { |
| 28 | + public static <T> T[] toArray(Collection<T> c) { |
| 29 | + T[] a = new T[c.size()]; // 编译错误 |
| 30 | + int i=0; for (T x : c) a[i++] = x; |
| 31 | + return a; |
| 32 | + } |
| 33 | +} |
34 | 34 | ```
|
35 | 35 |
|
36 | 36 | 这是一个错误,因为类型变量不是可确定类型。 尝试编译此代码会报告一个通用数组创建错误:
|
37 | 37 |
|
38 | 38 | ```java
|
39 |
| - % javac Annoying.java |
40 |
| - Annoying.java:4: generic array creation |
41 |
| - T[] a = new T[c.size()]; // 编译错误 |
42 |
| - ^ |
43 |
| - 1 error |
| 39 | +% javac Annoying.java |
| 40 | +Annoying.java:4: generic array creation |
| 41 | +T[] a = new T[c.size()]; // 编译错误 |
| 42 | + ^ |
| 43 | +1 error |
44 | 44 | ```
|
45 | 45 |
|
46 | 46 | 我们很快就讨论这个问题的解决方法。
|
47 | 47 |
|
48 | 48 | 作为第二个示例,请考虑返回包含两个列表的数组的以下(不正确)代码:
|
49 | 49 |
|
50 | 50 | ```java
|
51 |
| - import java.util.*; |
52 |
| - class AlsoAnnoying { |
53 |
| - public static List<Integer>[] twoLists() { |
54 |
| - List<Integer> a = Arrays.asList(1,2,3); |
55 |
| - List<Integer> b = Arrays.asList(4,5,6); |
56 |
| - return new List<Integer>[] {a, b}; // 编译错误 |
57 |
| - } |
58 |
| - } |
| 51 | +import java.util.*; |
| 52 | +class AlsoAnnoying { |
| 53 | + public static List<Integer>[] twoLists() { |
| 54 | + List<Integer> a = Arrays.asList(1,2,3); |
| 55 | + List<Integer> b = Arrays.asList(4,5,6); |
| 56 | + return new List<Integer>[] {a, b}; // 编译错误 |
| 57 | + } |
| 58 | +} |
59 | 59 | ```
|
60 | 60 |
|
61 | 61 | 这是一个错误,因为参数化类型不是可确定类型。 尝试编译此代码也会报告一个通用数组创建错误:
|
62 | 62 |
|
63 | 63 | ```java
|
64 |
| - % javac AlsoAnnoying.java |
65 |
| - AlsoAnnoying.java:6: generic array creation |
66 |
| - return new List<Integer>[] {a, b}; // 编译错误 |
67 |
| - ^ |
68 |
| - 1 error |
| 64 | +% javac AlsoAnnoying.java |
| 65 | +AlsoAnnoying.java:6: generic array creation |
| 66 | +return new List<Integer>[] {a, b}; // 编译错误 |
| 67 | + ^ |
| 68 | +1 error |
69 | 69 | ```
|
70 | 70 |
|
71 | 71 | 我们也很快讨论这个问题的解决方法。
|
|
0 commit comments