理解java泛型通配符

:是指 上界通配符(Upper Bounds Wildcards)表示为T的所有子类

:是指下界通配符(Lower Bounds Wildcards)表示为T的所有父类

class Person {}

class Boy extends Person {}

class Girl extends Person {}

class LittleBoy extends Boy {}

class LittleGirl extends Girl {}

List list = new ArrayList();

List list = new ArrayList();

可以装载Person的子类Boy、Girl,但

list.add(new Boy()); it not works;但这样却不行。。。是否推翻了上面的结论呢

List list = new ArrayList();

list.add(new Boy()); it not work;

list.add(new Girl()); it not work;

因为Person的子类类型是不确定的,如果这样能装载会使泛型失去意义。

但能使用:

Person person = list.get();因为所有的类型都是Person的子类,java多态形式。

而 下界通配符

List list = new ArrayList();

list.get(); it not work; 因为父类型是不确定的。

但能:list.add(new LittleBoy());因为他始终是插入Boy和Boy的子类是确定的。

开发时遵守PECS原则

PECS(Producer Extends Consumer Super)原则,已经很好理解了:

频繁往外读取内容的,适合用上界Extends。

经常往里插入的,适合用下界Super。

你可能感兴趣的:(理解java泛型通配符)