Java 泛型 <? super T> <? extend T> 的通俗理解

假设,我们有下面几个类:

class Food{

}
class Meat extends Food{

}
class Fruit extends Food{

}
class Apple extends Fruit{

}
class RedApple extends Apple{

}
class GreenApple extends Apple{

}

泛型通常用于容器,假如我们有一些箱子:

可以装肉的箱子 new Box();

可以装水果的箱子 new Box();

1. Box

我们给这两个箱子贴标签,上面写着(本箱子为装食物的箱子:Box),编号为box1、box2:

Box box1 = new Box();

Box box2 = new Box();

此时,有人使用这两个箱子,他根据标签只知道这两个都是食物的箱子,他有下面的行为:

- 他想要从箱子中拿出Food(get),他随便拿两个箱子中的任意一个,都获得了Food。

- 他想存放一个Apple(put),他走到box2前面,但是box2是装肉的箱子,所有他放Apple进去失败了。

2. BoxRedApple

假如我们还有和可以装水果的箱子,上面的标签是(可以装RedApple或者苹果父类的箱子:Box ),编号box3:

Box box3 = new Box();

此时,有人想用这个箱子,他根据标签只知道这个箱子是可以装RedApple或者RedApple父类的箱子,他有以下行为:

- 他想从箱子里面拿东西(Get),但拿出来了一个Meat,但他之前没见过Meat,很迷惑,这个世界上竟然有Meat,能吃吗。

- 他想放一个RedApple到这个箱子,于是放进去了。他想放一个GreenApple,也放进去了。

 

所有,PGCS,extends不能set,super 不能get

 

 

你可能感兴趣的:(笔记)