这一章节我们来讨论一下超类通配符。

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 超类通配符的更多相关文章

  1. sbt Getting org.scala-sbt sbt 0.13.12 ...

    本地仓库被我搞乱了,一气之下整个删掉了本地仓库,再重启sbt卡在Getting这一步. Getting org.scala-sbt sbt 0.13.12 ... 卡住 补充sbt配置文件: 文件结构 ...

  2. Java 13 明天发布,最新最全新特性解读

    2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布. 目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK ...

  3. Java 9 ← 2017,2019 Java → 13 ,都发生了什么?

    距离 2019 年结束,只剩下 35 天了.你做好准备迎接 2020 年了吗? 一到年底,人就特别容易陷入回忆和比较之中,比如说这几天, 的对比挑战就火了! 这个话题登上了微博的热搜榜,也刷爆了朋友圈 ...

  4. Java 9 ← 2017,2019 → Java 13,来看看Java两年来的变化

    距离 2019 年结束,只剩下 33 天了.你做好准备迎接 2020 年了吗? 一到年底,人就特别容易陷入回忆和比较之中,比如说这几天的对比挑战就火了! 这个话题登上了微博的热搜榜,也刷爆了朋友圈, ...

  5. Java 13 特性解读

    Java 13 特性解读    转 https://blog.csdn.net/bjweimengshu/article/details/100978383   2017年8月,JCP执行委员会提出将 ...

  6. Java 13新特性

    switch表达式 switch表达式是Java 12开始就提供的预览特性,到了Java 13仍然没有被转正.此特性可以把switch的执行结果组合到复合表达式中进行运算. import java.t ...

  7. 2019年9月17 发布 Java 13

    Java 13 明天发布,最新最全新特性解读   2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布. 目前,JDK官网 ...

  8. Java 13 发布了!

    点击上方蓝色链接,关注并"设为星标" Java干货,每天及时推送 通告一下,Java 13 09/17 发布了,尝鲜地址: https://www.oracle.com/techn ...

  9. Java 13 即将发布,新特性必须抢先看!

    作者:h4cd 本文转载自开源中国(ID:oschina2013) 由于 Java 现在采取"半年发布一次新版本"的模式,所以 Java 12 的下一个版本 Java 13/JDK ...

随机推荐

  1. Windows下mnist数据集caffemodel分类模型训练及测试

    1. MNIST数据集介绍 MNIST是一个手写数字数据库,样本收集的是美国中学生手写样本,比较符合实际情况,大体上样本是这样的: MNIST数据库有以下特性: 包含了60000个训练样本集和1000 ...

  2. Java基础学习(三) -- OOP的三大特征、向上和向下转型、内部类之详解

    面向对象编程(OOP)的三大特征 什么是封装? (1) 把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的类中; (2) "信息隐藏", 把不需要让外界知道的信息隐藏起来 ...

  3. VS2012恢复默认设置的2种方法

    方法一: 工具 → 导入和导出设置 → 重置所有设置 → 下一步 → 选择“是否保存当前设置”,下一步 → 选择“要重置的开发语言(如,Visual C# 开发设置)” → 完成. 方法二: 1.依次 ...

  4. vue中指令写了一个demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Redis-Sentinel原理及配置详解【转】

    https://www.cnblogs.com/zhoujinyi/p/5570024.html

  6. selenium的安装(2)

    selenium的安装:  1):selenium的在线按:使用dom的cmd打开命令提示符窗口.然后敲上这个命令可以安装了==> 安装命令 pip install selenium 删除命令: ...

  7. 【Educational Codeforces Round 37 A】 Water The Garden

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 记录下水龙头在哪些位置. 然后每秒钟把index-i和index+i改变状态一下就好(置1 [代码] #include <bi ...

  8. FastDFS学习总结(2)--Tracker与Storage配置详解

    1.Tracker基本配置 # is this config file disabled # false for enabled # true for disabled disabled=false ...

  9. Android笔记---Intent实现Activity跳转

    学了之前的Android控件以及布局,我们就能够做一些UI的设计了,这里我结合之前的知识.以一个小的登录项目来解说下Activity之间跳转. 先看下效果图: 1.登录界面: 2.点击登录按钮跳转到另 ...

  10. 从头认识java-18.2 主要的线程机制(5)-守护线程与非守护线程

    这一章节我们来讨论一下守护线程与非守护线程. 1.什么是守护线程?什么是非守护线程? 非守护线程:Java虚拟机在它全部非守护线程已经离开后自己主动离开. 守护线程:守护线程则是用来服务用户线程的,假 ...