Skip to content

Commit 25e6277

Browse files
update
1 parent 5d93f51 commit 25e6277

3 files changed

Lines changed: 7 additions & 10 deletions

File tree

JAVA/1.0 泛型.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
public <T> void show(T arg) {
3131
System.out.println(arg);
3232
}
33-
3433
```
3534

3635

@@ -54,9 +53,7 @@ List<? super View> list1 = new ArrayList<>();
5453
- 如果**参数之间的类型有依赖关系**,或者返**回值是与参数之间有依赖关系**的。那么就使用**泛型方法**
5554
- 如果**没有依赖关系**的,就使用**通配符**,通配符会**灵活一些.**
5655

57-
静态属性是无法使用泛型的。泛型对应的都是具体的对象。静态方法初始化的时候泛型还有具体的对象,此时是没有意义的。
58-
59-
56+
**静态属性是无法使用泛型的。泛型对应的都是具体的对象。静态方法初始化的时候泛型还没有具体的对象,此时是没有意义的。**
6057

6158

6259

JAVA/1.1 泛型中 extends 和 super 的区别.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ error: incompatible types: Plate<Apple> cannot be converted to Plate<Fruit>
4747
* 苹果 IS-A 水果
4848
* 装苹果的盘子 NOT-IS-A 装水果的盘子
4949

50-
所以,就算容器里装的东西之间有继承关系,但容器之间是没有继承关系的。所以我们不可以把 Plate 的引用传递给 Plate。
50+
所以,**就算容器里装的东西之间有继承关系,但容器之间是没有继承关系的。所以我们不可以把 Plate 的引用传递给 Plate。**
5151

5252
为了让泛型用起来更舒服,Sun 的大脑袋们就想出了`<? extends T>``<? super T>`的办法,来让 “水果盘子” 和“苹果盘子”之间发生关系。
5353

Kotlin/1. 泛型.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ List<TextView> textViews = buttons;
4040

4141
我们知道 `Button` 是继承自 `TextView` 的,根据 Java 多态的特性,第一处赋值是正确的。
4242

43-
但是到了 `List<TextView>` 的时候 IDE 就报错了,这是因为 Java 的泛型本身具有「不可变性 Invariance」,Java 里面认为 `List<TextView>``List<Button>` 类型并不一致,也就是说,子类的泛型(`List<Button>`)不属于泛型(`List<TextView>`)的子类。
43+
但是到了 `List<TextView>` 的时候 IDE 就报错了,这是因为 **Java 的泛型本身具有「不可变性 Invariance**」,Java 里面认为 `List<TextView>``List<Button>` 类型并不一致,也就是说,子类的泛型(`List<Button>`)不属于泛型(`List<TextView>`)的子类。
4444

45-
> Java 的泛型类型会在编译时发生**类型擦除**,为了保证类型安全,不允许这样赋值。至于什么是类型擦除,这里就不展开了。
45+
> Java 的泛型类型会在编译时发生**类型擦除**(==为了兼容老版==本),为了保证类型安全,不允许这样赋值。至于什么是类型擦除,这里就不展开了。
4646
>
4747
> 你可以试一下,在 Java 里用数组做类似的事情,是不会报错的,这是因为数组并没有在编译时擦除类型:
4848
>
@@ -92,7 +92,7 @@ Java 中的 ? extends
9292
9393
那我干脆不要 `extends TextView` ,只用通配符 `?` 呢?
9494
95-
这样使用 `List<?>` 其实是 `List<? extends Object>` 的缩写。
95+
**这样使用 `List<?>` 其实是 `List<? extends Object>` 的缩写。**
9696
9797
和前面的例子一样,编译器没法确定 `?` 的类型,所以这里就只能 `get` 到 `Object` 对象。
9898
@@ -134,8 +134,8 @@ Java 中的 ? super
134134
135135
小结下,Java 的泛型本身是不支持协变和逆变的。
136136
137-
* 可以使用泛型通配符 `? extends` 来使泛型支持协变,但是「只能读取不能修改」,这里的修改仅指对泛型集合添加元素,如果是 `remove(int index)` 以及 `clear` 当然是可以的。
138-
* 可以使用泛型通配符 `? super` 来使泛型支持逆变,但是「只能修改不能读取」,这里说的不能读取是指不能按照泛型类型读取,你如果按照 `Object` 读出来再强转当然也是可以的。
137+
* 可以使用泛型通配符 `? extends` 来使泛型支持协变,但是「**只能读取不能修改**」,这里的修改仅指对泛型集合添加元素,如果是 `remove(int index)` 以及 `clear` 当然是可以的。
138+
* 可以使用泛型通配符 `? super` 来使泛型支持逆变,但是「**只能修改不能读取**」,这里说的不能读取是指不能按照泛型类型读取,你如果按照 `Object` 读出来再强转当然也是可以的。
139139
140140
根据前面的说法,这被称为 PECS 法则:「_Producer-Extends, Consumer-Super_」。
141141

0 commit comments

Comments
 (0)