从头认识java-13.12 超类通配符
这一章节我们来讨论一下超类通配符。
1.什么是超类通配符
在前一章节我们提到一种通配符,是使用<?
extends XXX>来实现的,导致了后面的一系列问题,如今我们引入还有一种通配符--超类通配符。它是使用<?
super XXX>来实现的。
样例:
package com.ray.ch13;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<? super Fruit> list = new ArrayList<Fruit>();
// ArrayList<? super Fruit> list2 = new ArrayList<Apple>();//error
}
}
class Fruit {
}
class Apple extends Fruit {
}
class Fuji extends Apple {
}
注意:使用超类通配符。前后的边界必须保持一致。不然抛异常。
2.超类通配符与上一章节的通配符有什么不同?
代码:
package com.ray.ch13;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<? extends Fruit> fruits = new ArrayList<Fruit>();
fruits.add(null);// 上一章节出现的问题
ArrayList<?
super Fruit> list = new ArrayList<Fruit>();
list.add(new Fruit());
list.add(new Apple());
list.add(new Fuji());
// ArrayList<?
super Apple> list1 = new ArrayList<Fruit>();//编译通过
ArrayList<?
super Apple> list1 = new ArrayList<Apple>();
list1.add(new Apple());
list1.add(new Fuji());
// ArrayList<? super Fuji> list2 = new ArrayList<Fruit>();//编译通过
// ArrayList<? super Fuji> list2 = new ArrayList<Apple>();//编译通过
ArrayList<? super Fuji> list2 = new ArrayList<Fuji>();
list2.add(new Fuji());
ArrayList<?
super Fuji> list3 = new ArrayList<Fruit>();
list3.add(new Fuji());
}
}
class Fruit {
}
class Apple extends Fruit {
}
class Fuji extends Apple {
}
观察上面的代码,能够发现:
(1)上一章节出现的问题就是不知道泛型的边界。从而无法add对象。
(2)使用了超类通配符。创建对象的泛型边界能够是定义时參数类型的父类(这里比較绕口,请看凝视);
(3)使用了超类通配符。就是定义了下界,能够把泛型的子类和本身类型的对象add到容器里面。
总结:这一章节注意介绍超类通配符,以及跟上一章节通配符的差别。
这一章节就到这里。谢谢。
-----------------------------------
从头认识java-13.12 超类通配符的更多相关文章
- sbt Getting org.scala-sbt sbt 0.13.12 ...
本地仓库被我搞乱了,一气之下整个删掉了本地仓库,再重启sbt卡在Getting这一步. Getting org.scala-sbt sbt 0.13.12 ... 卡住 补充sbt配置文件: 文件结构 ...
- Java 13 明天发布,最新最全新特性解读
2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布. 目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK ...
- Java 9 ← 2017,2019 Java → 13 ,都发生了什么?
距离 2019 年结束,只剩下 35 天了.你做好准备迎接 2020 年了吗? 一到年底,人就特别容易陷入回忆和比较之中,比如说这几天, 的对比挑战就火了! 这个话题登上了微博的热搜榜,也刷爆了朋友圈 ...
- Java 9 ← 2017,2019 → Java 13,来看看Java两年来的变化
距离 2019 年结束,只剩下 33 天了.你做好准备迎接 2020 年了吗? 一到年底,人就特别容易陷入回忆和比较之中,比如说这几天的对比挑战就火了! 这个话题登上了微博的热搜榜,也刷爆了朋友圈, ...
- Java 13 特性解读
Java 13 特性解读 转 https://blog.csdn.net/bjweimengshu/article/details/100978383 2017年8月,JCP执行委员会提出将 ...
- Java 13新特性
switch表达式 switch表达式是Java 12开始就提供的预览特性,到了Java 13仍然没有被转正.此特性可以把switch的执行结果组合到复合表达式中进行运算. import java.t ...
- 2019年9月17 发布 Java 13
Java 13 明天发布,最新最全新特性解读 2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布. 目前,JDK官网 ...
- Java 13 发布了!
点击上方蓝色链接,关注并"设为星标" Java干货,每天及时推送 通告一下,Java 13 09/17 发布了,尝鲜地址: https://www.oracle.com/techn ...
- Java 13 即将发布,新特性必须抢先看!
作者:h4cd 本文转载自开源中国(ID:oschina2013) 由于 Java 现在采取"半年发布一次新版本"的模式,所以 Java 12 的下一个版本 Java 13/JDK ...
随机推荐
- rest_framework 视图
视图: a.过去 class PagerView(View): pass b.现在 class Pager1View(APIView): pass c.rest_framework 基本没用 from ...
- Square roots
Loops are often used in programs that compute numerical results by starting with an approximate answ ...
- miniUI-SelectGrid 弹出选择表格-翻页选中
介绍 mini中已经给出 弹出表格的里例子 :MiniUi版本 但是在应用过程中遇到写小问题就是没有办法翻页后一并连之前翻页选中的一起提交 以下是解决方案 正文 下面首先介绍 JS 代码 //存储已 ...
- #p-complete原来比np更难
转载一下豆瓣的一个不知名的朋友的介绍: NP是指多项式时间内验证其解是否正确.比如: 我们给一个0-1背包的解,就可以在多项式时间内验证是否满足条件.至于是否能找到 满足条件的解,这在NP复杂度里没有 ...
- Vuejs componet
Vuejs componet <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- UI Framework-1: Browser Window
Browser Window The Chromium browser window is represented by several objects, some of which are incl ...
- P3157 [CQOI2011]动态逆序对 CDQ分治
一道CDQ分治模板题简单来说,这道题是三维数点对于离线的二维数点,我们再熟悉不过:利用坐标的单调递增性,先按更坐标排序,再按纵坐标排序更新和查询时都直接调用纵坐标.实际上,我们是通过排序将二维中的一维 ...
- 入门python:《Python编程从入门到实践》中文PDF+英文PDF+代码学习
入门python推荐学习久负盛名的python入门书籍<Python编程从入门到实践>. 书中涵盖的内容是比较精简的,没有艰深晦涩的概念,最重要的是每个小结都附带有"动手试一试& ...
- linux Cenos-7.0下安装jdk搭建环境变量
搭建linux系统的java环境本人目前所知有两种方式: 第一种是从oracle官网下载linux系统的jdk版本: 第二种是使用yum命令的方式下载安装,咱们今天讲的是第一种方式. 一.工具准备: ...
- P1872 回文串计数(回文树)
题目描述 小a虽然是一名理科生,但他常常称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名其妙的热爱,这也促使他走向了以记忆量大而闻名的生物竞赛.然而,他很快发现这并不能满足他热爱背诵的心,但 ...