Skip to content

Commit 2dc7cf7

Browse files
authored
Update 20-Generics.md (lingcoder#487)
删除多余空格,使markdown正常显示
1 parent cff9d8d commit 2dc7cf7

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

docs/book/20-Generics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2957,7 +2957,7 @@ public class UnboundedWildcards2 {
29572957
```
29582958

29592959
但是,当你拥有的全都是无界通配符时,就像在 `Map<?,?>` 中看到的那样,编译器看起来就无法将其与原生 **Map** 区分开了。另外, **UnboundedWildcards1.java** 展示了编译器处理 `List<?>` 和 `List<? extends Object>` 是不同的。
2960-
令人困惑的是,编译器并非总是关注像 `List` 和 `List<?>` 之间的这种差异,因此它们看起来就像是相同的事物。事实上,因为泛型参数擦除到它的第一个边界,因此 `List<?>` 看起来等价于 `List<Object>` ,而 **List** 实际上也是 `List<Object>` ——除非这些语句都不为真。**List** 实际上表示“持有任何 **Object** 类型的原生 **List ** ”,而 `List<?>` 表示“具有某种特定类型的非原生 **List** ,只是我们不知道类型是什么。”
2960+
令人困惑的是,编译器并非总是关注像 `List` 和 `List<?>` 之间的这种差异,因此它们看起来就像是相同的事物。事实上,因为泛型参数擦除到它的第一个边界,因此 `List<?>` 看起来等价于 `List<Object>` ,而 **List** 实际上也是 `List<Object>` ——除非这些语句都不为真。**List** 实际上表示“持有任何 **Object** 类型的原生 **List** ”,而 `List<?>` 表示“具有某种特定类型的非原生 **List** ,只是我们不知道类型是什么。”
29612961
编译器何时才会关注原生类型和涉及无界通配符的类型之间的差异呢?下面的示例使用了前面定义的 `Holder<T>` 类,它包含接受 **Holder** 作为参数的各种方法,但是它们具有不同的形式:作为原生类型,具有具体的类型参数以及具有无界通配符参数:
29622962

29632963
```java

0 commit comments

Comments
 (0)