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 ...
随机推荐
- jmeter -- beanshell 执行本地py文件
Process proc = Runtime.getRuntime().exec("python /Users/lucax/Desktop/工作/Ai双师项目/性能优化迭代_脚本准备/获取学 ...
- transition css3 渐变效果
div { width:100px; transition: width 2s; -moz-transition: width 2s; /* Firefox 4 */ -webkit-transiti ...
- c#webservice的简单示例
webservice.就概念上来说,可能比较复杂,不过我们可以有个宏观的了解:webservice就是个对外的接口,里面有 函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端 ...
- 【Leetcode_easy】697. Degree of an Array
problem 697. Degree of an Array 题意:首先是原数组的度,其次是和原数组具有相同的度的最短子数组.那么最短子数组就相当于子数组的首末数字都是统计度的数字. solutio ...
- Matlab批量获取子文件夹与文件名
批量得到父文件夹下所有子文件夹的路径的MATLAB函数. function [SubFolders] = GetFolders(ParentFolder) %GetFolders % 函数功能为获取父 ...
- Navicat安装及使用
一.安装Navicat 1.下载安装文件:navicat11.0.17_premium_cs_x86.exe(32位) 2.Oracle 的 Instance Client:instantclient ...
- Python中的并行编程速度
这里主要想记录下今天碰到的一个小知识点:Python中的并行编程速率如何? 我想把AutoTool做一个并行化改造,主要目的当然是想提高多任务的执行速度.第一反应就是想到用多线程执行不同模块任务,但是 ...
- IO-file-04 文件的创建
1. package com.bwie.io; import java.io.File; import java.io.IOException; public class FileDemo4 { /* ...
- jquery绑定input的change事件
### jquery绑定input的change事件 背景:在做一个登录页时,如果用户未输入验证码则无法点击登录按钮,所以想到了用input的change事件,但是在写完后发现无法监听input值的改 ...
- 解决 pycharm [Errno 11001] getaddrinfo failed 错误提示!
我看网上很多问题对这个问题的解决方法也是一只半解的,可能产生问题的原因不一样吧,今天我说下我的经验 解决办法: 原因就是你的本地dns解析的host文件,里面的的解析地址被注释了! 打开本地的hous ...