JAVA泛型的上界通配符、下界通配符
- 假设
Class Apple extends Fruit extends Food
- 上界通配符:
<? extends T>
ArrayList<? extends Fruit>: 表示这个 ArrayList 可能是 ArrayList<Fruit> 或 ArrayList<Apple>
- 上界不能
set或add: 例如你想往ArrayList<? extends Fruit>中add一个Apple,因为ArrayList<? extends Fruit>可能是ArrayList<Fruit>,所以是不行的。
- 上界可以
get: 因为ArrayList<Fruit> 或 ArrayList<Apple>中的元素都可以用Fruit接收
- 下界通配符:
<? super T>
ArrayList<? super Fruit>: 表示这个 ArrayList 可能是 ArrayList<Fruit> 或 ArrayList<Food>
- 下界可以
set或add: ArrayList<Fruit> 或 ArrayList<Food>都可以add一个Fruit
- 下界不可
get: Fruit没办法接收 ArrayList<Food>的元素
- PECS(Producer Extends Consumer Super)原则
- 频繁往外读取内容的,适合用上界
extends。
- 经常往里插入的,适合用下界
super。