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<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> 的通俗理解相关推荐
- Java 泛型super和extend
假设:Men extends Person 但是不能 List<Person> list = new List<Men>(); 会报错! 因为: Men is-a Person ...
- java 死锁演示_史上最通俗理解的Java死锁代码演示
死锁的概念 知识储备 对象锁:Java一切皆对象,每个类都有一个class文件.由class文件可以new出对象,我们简单认识 下java对象,对象有个对象头信息,也就是这个对象概述,其中一条信息就是 ...
- Java 泛型 super extends 边界
1 为什么要用通配符和边界? 使用泛型的过程中,经常出现一种很别扭的情况 比如我们有Fruit类,和它的派生类Apple class Fruit {} class Apple extends Frui ...
- 泛型 super和extend
一:擦除 要理解super和extends的边界问题,首先要理解消除. 先看一个有趣的例子,代码打印结果为true public class Abrasion {public static void ...
- java泛型extend使用_java泛型中的? extend E 和 ? super E
public class TestType { public static void main(String[] args) { //? extend B,在定义泛型时,只能接受B或B的子类 List ...
- Java泛型 通配符? extends与super
本文来源:https://i.cnblogs.com/EditPosts.aspx?opt=1 感谢博主.本文仅供参考学习. Java 泛型 关键字说明 ? 通配符类型 <? extends T ...
- Java泛型中extends T和super T的区别?
<? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...
- java中super()_Java 泛型中 extends 和 super 的区别是什么?
<? extends T> 和 <? super T> 是 Java 泛型中的 "通配符(Wildcards)" 和 "边界(Bounds)&qu ...
- Java泛型三:通配符详解extends super
在java泛型中,? 表示通配符,代表未知类型,< ? extends Object>表示上边界限定通配符,< ? super Object>表示下边界限定通配符. 通配符 与 ...
- Java泛型中extends和super的理解(转)
E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类) K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定 ...
最新文章
- 重磅!2020中国高校毕业生月薪排名:清华第1,共计24高校月薪过万
- swift开发记录 - MARK,TODO,FIXME
- python笔记 print+‘\r‘ (打印新内容时删除打印的旧内容)
- asp中关于从utf8页面到gb2312页面出现乱码得解决
- mysql行级视图与列级视图_[数据库]--DML、DDL、TCL语言
- 小程序如何传数组数据到vs后台中
- 超文本引用href的几种用法
- Android基于mAppWidget实现手绘地图(二)--概要
- php 降低视频分辨率,怎么看视频的分辨率 如何改变视频分辨率|视频分辨率修改器...
- 毕向东_JavaScript视频教程_JavaScript回顾
- Python自学教程3-英语不好,变量怎么命名
- 正态分布是离散分布还是连续分布_什么是正态分布?知道它有什么用?
- 诺顿杀毒软件22010最新注册码
- python绘图设置时间坐标轴_Matplotlib绘图双纵坐标轴设置及控制设置时间格式
- github unable to access 'https://github.com/...: Failed to connect to github.com port 443‘
- iPhone系统可以降级吗?
- 物联网毕业设计 单片机智能扫地机器人设计与实现
- JAVA开发运维(Jenkins中踩的坑)
- Windows系统安装Git最新版 Git-2.20.0-64-bit
- docker-compose 启动 Redis 服务
热门文章
- ubuntu安装photoshop
- 时空人工智能概念特点和核心能力
- 使用反射时出现java.lang.NoSuchMethodException
- 国内主要的量化交易平台
- Nachos project1 领悟
- QObject成员函数connect()函数
- 图解强化学习 原理 超详解 (一)
- 景观分析(二)——Patch Analyst 5
- 直播电商平台开发,点击让窗口抖动动画效果
- SpringCloud-11-解决[NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has bee