Skip to content

Commit 00a3c42

Browse files
authored
Update 06_Wildcards_Versus_Type_Parameters.md
1 parent b407234 commit 00a3c42

File tree

1 file changed

+44
-44
lines changed

1 file changed

+44
-44
lines changed

ch02/06_Wildcards_Versus_Type_Parameters.md

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,71 +8,71 @@
88

99
通配符: 以下是 `Java` 中泛型方法的类型:
1010

11-
```java
12-
interface Collection<E> {
13-
...
14-
public boolean contains(Object o);
15-
public boolean containsAll(Collection<?> c);
16-
...
17-
}
18-
```
11+
```java
12+
interface Collection<E> {
13+
...
14+
public boolean contains(Object o);
15+
public boolean containsAll(Collection<?> c);
16+
...
17+
}
18+
```
1919

2020
第一种方法根本不使用泛型! 第二种方法是我们第一次看到一个重要的缩写。 类型 `Collection <?>` 代表:
2121

22-
```java
23-
Collection<? extends Object>
24-
```
22+
```java
23+
Collection<? extends Object>
24+
```
2525

2626
扩展对象是通配符最常用的用法之一,所以提供一个简短的表单来编写它是有意义的.
2727

2828
这些方法让我们测试成员和遏制:
2929

30-
```java
31-
Object obj = "one";
32-
List<Object> objs = Arrays.<Object>asList("one", 2, 3.14, 4);
33-
List<Integer> ints = Arrays.asList(2, 4);
34-
assert objs.contains(obj);
35-
assert objs.containsAll(ints);
36-
assert !ints.contains(obj);
37-
assert !ints.containsAll(objs);
38-
```
30+
```java
31+
Object obj = "one";
32+
List<Object> objs = Arrays.<Object>asList("one", 2, 3.14, 4);
33+
List<Integer> ints = Arrays.asList(2, 4);
34+
assert objs.contains(obj);
35+
assert objs.containsAll(ints);
36+
assert !ints.contains(obj);
37+
assert !ints.containsAll(objs);
38+
```
3939

4040
给定的对象列表包含字符串“one”和给定的整数列表,但给定的整数列表不包含字符串“one”,也不包含给定的对象列表。
4141

4242
测试 `ints.contains(obj)``ints.containsAll(objs)` 可能看起来很愚蠢。当然,整数列表将不包含任意对象,如字符串“one”。 但这是允许的,因为有时这
4343
样的测试可能会成功:
4444

45-
```java
46-
Object obj = 1;
47-
List<Object> objs = Arrays.<Object>asList(1, 3);
48-
List<Integer> ints = Arrays.asList(1, 2, 3, 4);
49-
assert ints.contains(obj);
50-
assert ints.containsAll(objs);
51-
```
45+
```java
46+
Object obj = 1;
47+
List<Object> objs = Arrays.<Object>asList(1, 3);
48+
List<Integer> ints = Arrays.asList(1, 2, 3, 4);
49+
assert ints.contains(obj);
50+
assert ints.containsAll(objs);
51+
```
5252

5353
在这种情况下,对象可能被包含在整数列表中,因为它碰巧是一个整数,并且对象列表可能包含在整数列表中,因为列表中的每个对象碰巧是一个整数。 - 类型参数你
5454
可以合理地选择一个替代设计的集合- 只能测试元素类型的子类型的容器的设计:
5555

56-
```java
57-
interface MyCollection<E> { // alternative design
58-
...
59-
public boolean contains(E o);
60-
public boolean containsAll(Collection<? extends E> c);
61-
...
62-
}
63-
```
56+
```java
57+
interface MyCollection<E> { // alternative design
58+
...
59+
public boolean contains(E o);
60+
public boolean containsAll(Collection<? extends E> c);
61+
...
62+
}
63+
```
6464

6565
假设我们有一个实现 `MyCollection``MyList` 类。 现在这些测试是合法的,只有一个方法:
6666

67-
```java
68-
Object obj = "one";
69-
MyList<Object> objs = MyList.<Object>asList("one", 2, 3.14, 4);
70-
MyList<Integer> ints = MyList.asList(2, 4);
71-
assert objs.contains(obj);
72-
assert objs.containsAll(ints)
73-
assert !ints.contains(obj); // 编译报错
74-
assert !ints.containsAll(objs); // 编译报错
75-
```
67+
```java
68+
Object obj = "one";
69+
MyList<Object> objs = MyList.<Object>asList("one", 2, 3.14, 4);
70+
MyList<Integer> ints = MyList.asList(2, 4);
71+
assert objs.contains(obj);
72+
assert objs.containsAll(ints)
73+
assert !ints.contains(obj); // 编译报错
74+
assert !ints.containsAll(objs); // 编译报错
75+
```
7676

7777
最后两个测试是非法的,因为类型声明要求我们只能测试一个列表是否包含该列表的一个子类型的元素。所以我们可以检查一个对象列表是否包含整数列表,而不是相
7878
反。

0 commit comments

Comments
 (0)