从头认识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 ...
随机推荐
- 编写SDR SDRAM页突发模式控制器的注意点
网上有很多的SDR SDRAM控制器的代码,但都是基于burst1/2/4/8模式下的,这种模式下传输高速的相机数据还是有点拮据的,所以花了几天把这些模式改造成了页突发模式.我的这个控制器模型是这样的 ...
- python中对单例模式的理解
class Foo(object): instance = None def __init__(self): pass def process(self): ' @classmethod #版本1单例 ...
- isInstanceOf,asInstanceOf,classOf[T]
一.scala中把classOf[T]看成Java里的T.class, obj.isInstanceOf[T]看成 obj instanceof T, obj.asInstanceOf[T]看成(T) ...
- Error creating bean with name 'testController': Injection of resource dependencies failed;
启动ssm项目报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 't ...
- VS 代码打包工具
源代码下载地址 https://github.com/loresoft/msbuildtasks
- atom玩法
1.先用 git 下载一个 react-devtools: $ cd /some-directory$ git clone --recursive https://github.com/faceboo ...
- jquery easyui ajax data属性传值方式
$.ajax({ url:url, type:'post', data:data, dataType:'json', contentType: "application/ ...
- 把asp:CheckBoxList 变成单选框
单选框代码 <asp:CheckBoxList runat="server" RepeatDirection="Horizontal" ID=" ...
- grvphviz && dot脚本语言
安装graphviz 可去官网下载http://www.graphviz.org/download/下载之后按步骤安装 打开编辑器,创建*.dot文件,编辑dot脚本代码,保存. D:\>dot ...
- 使用物化视图解决GoldenGate不能使用中文表名问题
源端: conn sh/sh create table "学生" ("学号" number primary key,"姓名" varchar ...