记住一个前提
java 中的List<> 在运行中, 只会是一种类型 ;例如: LIst<Dog> List<Cat> List<Object>
判断能否转换成统一一种类型, 能转换就能写
Animal是Dog Cat的超类 littleDog是Dog的子类 littleCat 是Cat的子类
List<? extends Animal> a;
List<? super Dog> b;
- 往a中加Cat,因为是extends, 所以a中泛型的类型可能是Dog,也就是Animal的子类, 此时Cat不能转成Dog, 因此不能写,违背前提;
- 往b中加littleDog, 如果此时b中是Object, littleDog能转成Object, 如果此时b中是Dog, littleDog也能转成Dog, b中存的都是Dog,没问题。 总之, b中实际的类型,肯定是Dog的超类, 那么无论加入什么Dog的子类,都能强转到那个类型。