JAVA 泛型 通配符? extends super限定,实例区分extends super限定的作用用法
java泛型中的关键字
- ? 表示通配符类型
- <? extends T> 既然是extends,就是表示泛型参数类型的上界,说明参数的类型应该是T或者T的子类。
- <? super T> 既然是super,表示的则是类型的下界,说明参数的类型应该是T类型的父类,一直到object。
实例代码看具体的区别
public class FanXing {
static class Fruit {
}
static class Apple extends Fruit {
}
static class Orange extends Apple {
}
public static void main(String... args) throws Exception {
List<? extends Fruit> list = new ArrayList<Orange>();
//无法安全添加不确定类型的元素
list.add(new Orange());
list.add(null);
Fruit fruit = list.get(0);
Orange orange = (Orange) list.get(0);
List<? super Fruit> list1 = new ArrayList<>();
list1.add(new Orange());
//无法确定具体的返回类型
Fruit fruit1 = list1.get(0);
Orange orange1 = (Orange) list1.get(0);
}
}
来看一下代码编译器中两种不同的限定报错

extends限定
List<? extends Fruit> 表示是一个Fruit类弄的或者Fruit子类的泛型
编译器无法确定List所持有的类型,所以无法安全的向其中添加对象。
但是可以添加null,因为null可以表示任何类型。
由于list里面的类型是从Fruit中继承过来的,所以可以安全取出Fruit类型
super限定
List<? super Fruit> 表示是一个Fruit类弄的或者Fruit父类的泛型
列表的类型至少是一个Fruit类型,因此可以安全的向其中添加Fruit及其子类型
由于list里面的类型是从Fruit的父类,编译器无法确定返回的类型,所以直接取值时会报错
小结
extends 可用于的返回类型限定,不能用于参数类型限定。
super 可用于参数类型限定,不能用于返回类型限定。
希望只取出,不插入,就使用? extends
希望只插入,不取出,就使用? super
希望,即能插入,又能取出,就不要用通配符?
JAVA 泛型 通配符? extends super限定,实例区分extends super限定的作用用法的更多相关文章
- Java 泛型 通配符类型
Java 泛型 通配符类型 @author ixenos 摘要:限定通配符类型.无限定通配符类型.与普通泛型区别.通配符捕获 通配符类型 通配符的子类型限定(?都是儿孙) <? extends ...
- java 泛型通配符 extends, super
引自:http://sharewind.iteye.com/blog/1622164 关键字说明 ? 通配符类型 <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 ...
- Java泛型 通配符? extends与super
Java 泛型 关键字说明 ? 通配符类型 <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类 <? super T> 表示类型下界(Java ...
- JAVA 泛型通配符 ? EXTENDS SUPER 的用法
1. <? extends Hero> ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型heroList 的泛型可能 ...
- Java泛型通配符以及限定
摘抄笔记 A:泛型的限定 /* * 将的酒店员工,厨师,服务员,经理,分别存储到3个集合中 * 定义方法,可以同时遍历3集合,遍历三个集合的同时,可以调用工作方法 */ import java.uti ...
- [转]JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
原文地址:https://www.jianshu.com/p/95f349258afb 1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被 ...
- JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...
- JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别以及接口里default方法
使用大写字母A,B,C,D......X,Y,Z定义的,就都是泛型,把T换成A也一样,这里T只是名字上的意义而已 ? 表示不确定的java类型 T (type) 表示具体的一个java类型 K V ( ...
- 理解Java泛型 通配符 ? 以及其使用
什么是泛型: 泛型从字面上理解,是指一个类.接口或方法支持多种类型,使之广泛化.一般化和更加通用.Java中使用Object类来定义类型也 能实现泛型,但缺点是造成原类型信息的丢失,在使用中容易造成C ...
随机推荐
- 用python查看文件是否存在的三种方式
目录 1.使用os模块 判断文件是否可做读写操作 2.使用Try语句 3. 使用pathlib模块 正文 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做 ...
- delphi中TTreeView的使用方法
[学习万一老师博客摘要] TTreeView 与两个重要的类相关:TTreeNodes.TTreeNode . TTreeNodes即是TTreeView 的Items属性,TTreeNodes是TT ...
- 【用户体验度量】用户费力度评分(CES)
http://www.woshipm.com/operate/2819882.html CES这个评分方式有点意思. 相关文章: http://www.woshipm.com/pd/856291.ht ...
- (七)利用servlet生成图片验证码
总结: 验证码就是一张图,然后往这张图上写入随机的字符(数字字母等). 1.1 编写html页面 <!DOCTYPE html> <html> <head> < ...
- vue中使用axios下载文件,兼容IE11
一.设置axios返回值为blob 二.使用a标签的down属性下载,如果是IE浏览器,可以使用navigator.msSaveBlob进行下载 // data的数据类型是blob downloadF ...
- ${__setProperty 等常见jmeter参数相关博客汇总
jmeter 控制线程组执行顺序 这个要配合全局变量.if和while来实现BeanShell取样器,全局变量:${__setProperty(newswitch,${switch1},)}if条 ...
- logback日志输出至数据库
我们知道将数据库输出到不同的地方需要使用不同的appender表示,那下面了解一下输出到数据库的DBAppender. 1.DBAppender 由于DBAppender会把记录写到数据库中,因此我们 ...
- C++操作文件行(读取,删除,修改指定行)
/******************************************************** Copyright (C), 2016-2018, FileName: main A ...
- 【C++札记】new和delete
介绍 1.malloc,free和new,delete区别. a.malloc,free是C/C++的标准库函数.new,delete是c++的操作符. b.malloc申请的是内存,严格意义不是&q ...
- Python——类和对象(二)
一.实例方法和自动绑定self 在类中定义的实例方法,Python会自动绑定方法的第一个参数(通常是self,下文也默认为self),第一个参数总会指向调用该方法的对象,因为实例方法(包括构造方法)第 ...