01 自定义泛型类与泛型方法
class Pet<E> {
public E eat(E e){
return e;
}
}
? 表示不确定的Java类型
T 表示Java类型
K V 表示Java键值对中的键 与 值
E 表示 Element ,一般用于集合中存放的元素
02 为什么要用通配符与边界
Map<? extends K, ? super V>
? 代表通配符,代表不确定的类型
class Fruit{} //水果类
class Apple extends Fruit{} //苹果 继承 水果
class Plate<Fruit>{} //装水果的盘子
public class Test{
public static void main(String[] args){
Plate<Fruit> p1 = new Plate<Fruit>(); //编译通过
Plate<Fruit> p2 = new Plate<Apple>(); //编译不通过,装水果的盘子 不是 装苹果的盘子
Plate<? extends Fruit> p3 = new Plate<Apple>(); //编译通过, Fruit 作为上界
}
}
通配符 ?的缺点:
- 上界 <? extends T> 不能往里存,只能往外取
- 下界 <? super T> 不印象往里存,但往外取只能放在 Object 对象里
PECS原则:
PECS(Producer Extends Consumer Super)原则:
- 频繁往外读数据,用上界(extends)
- 频繁往里写数据,用下界(super)