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

class Food{}
class Meat extends Food{}
class Fruit extends Food{}
class Apple extends Fruit{}
class RedApple extends Apple{}
class GreenApple extends Apple{}

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

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

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

1. Box<? extends Food>

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

Box<? extends Food> box1 = new Box<Fruit>();

Box<? extends Food> box2 = new Box<Meat>();

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

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

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

2. Box<? super RedApple

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

Box<? super RedApple> box3 = new Box<Fruit>();

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

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

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

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

Java 泛型 <? super T> <? extend T> 的通俗理解相关推荐

  1. Java 泛型super和extend

    假设:Men extends Person 但是不能 List<Person> list = new List<Men>(); 会报错! 因为: Men is-a Person ...

  2. java 死锁演示_史上最通俗理解的Java死锁代码演示

    死锁的概念 知识储备 对象锁:Java一切皆对象,每个类都有一个class文件.由class文件可以new出对象,我们简单认识 下java对象,对象有个对象头信息,也就是这个对象概述,其中一条信息就是 ...

  3. Java 泛型 super extends 边界

    1 为什么要用通配符和边界? 使用泛型的过程中,经常出现一种很别扭的情况 比如我们有Fruit类,和它的派生类Apple class Fruit {} class Apple extends Frui ...

  4. 泛型 super和extend

    一:擦除 要理解super和extends的边界问题,首先要理解消除. 先看一个有趣的例子,代码打印结果为true public class Abrasion {public static void ...

  5. java泛型extend使用_java泛型中的? extend E 和 ? super E

    public class TestType { public static void main(String[] args) { //? extend B,在定义泛型时,只能接受B或B的子类 List ...

  6. Java泛型 通配符? extends与super

    本文来源:https://i.cnblogs.com/EditPosts.aspx?opt=1 感谢博主.本文仅供参考学习. Java 泛型 关键字说明 ? 通配符类型 <? extends T ...

  7. Java泛型中extends T和super T的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  8. java中super()_Java 泛型中 extends 和 super 的区别是什么?

    <? extends T> 和 <? super T> 是 Java 泛型中的 "通配符(Wildcards)" 和 "边界(Bounds)&qu ...

  9. Java泛型三:通配符详解extends super

    在java泛型中,? 表示通配符,代表未知类型,< ? extends Object>表示上边界限定通配符,< ? super Object>表示下边界限定通配符. 通配符 与 ...

  10. Java泛型中extends和super的理解(转)

    E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类) K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定 ...

最新文章

  1. 重磅!2020中国高校毕业生月薪排名:清华第1,共计24高校月薪过万
  2. swift开发记录 - MARK,TODO,FIXME
  3. python笔记 print+‘\r‘ (打印新内容时删除打印的旧内容)
  4. asp中关于从utf8页面到gb2312页面出现乱码得解决
  5. mysql行级视图与列级视图_[数据库]--DML、DDL、TCL语言
  6. 小程序如何传数组数据到vs后台中
  7. 超文本引用href的几种用法
  8. Android基于mAppWidget实现手绘地图(二)--概要
  9. php 降低视频分辨率,怎么看视频的分辨率 如何改变视频分辨率|视频分辨率修改器...
  10. 毕向东_JavaScript视频教程_JavaScript回顾
  11. Python自学教程3-英语不好,变量怎么命名
  12. 正态分布是离散分布还是连续分布_什么是正态分布?知道它有什么用?
  13. 诺顿杀毒软件22010最新注册码
  14. python绘图设置时间坐标轴_Matplotlib绘图双纵坐标轴设置及控制设置时间格式
  15. github unable to access 'https://github.com/...: Failed to connect to github.com port 443‘
  16. iPhone系统可以降级吗?
  17. 物联网毕业设计 单片机智能扫地机器人设计与实现
  18. JAVA开发运维(Jenkins中踩的坑)
  19. Windows系统安装Git最新版 Git-2.20.0-64-bit
  20. docker-compose 启动 Redis 服务

热门文章

  1. ubuntu安装photoshop
  2. 时空人工智能概念特点和核心能力
  3. 使用反射时出现java.lang.NoSuchMethodException
  4. 国内主要的量化交易平台
  5. Nachos project1 领悟
  6. QObject成员函数connect()函数
  7. 图解强化学习 原理 超详解 (一)
  8. 景观分析(二)——Patch Analyst 5
  9. 直播电商平台开发,点击让窗口抖动动画效果
  10. SpringCloud-11-解决[NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has bee