java面试 泛型_Java面试题五:Java 的泛型, super T 和 extends T 的区别
相关文章:
java泛型通配符 ? extends T 和 ? super T 的区别和用法
一、二者的意思
? extends T :表示上界是T, ? 都是继承自T的,都是T的子类;
? super T :表示下界是T,?都是T的父类;
二、用法
例1,我们有多个对象,其中Cat,Dog,Chicken都是extends Animal的。
List extends Animal> list = new ArrayList();
List extends Animal> list = new ArrayList();
List extends Animal> list = new ArrayList();
此时,List ? extends Animal list是无法得知这个list究竟可能是上面的哪一种,所以,list是无法 使用add方法的,但是我们可以读取到Anumal类型的数据。
例2,我们有DogFather1,DogFather2,DogFather3,都可能是Dog的父类。
List super Dog> list = new ArrayList();
List super Dog> list = new ArrayList();
List super Dog> list = new ArrayList();
这样,我们不能确定这个list里究竟是DogFather1,还是DogFather2,还是DogFather3,所以我们读取时无法得知读取的是什么类型,但是我们可以写入Dog及其子类对象。
三、总结
第一、 频繁往外读取内容的,适合用 ? extends T;
第二、 经常往里插入的,适合用 ? super T;
(阿里JAVA开发手册强制这样使用,见集合处理的第6条)
这个用法的典型用法可以在java的集合类Collections源码中找到:
public static void copy(List super T> dest, List extends T> src) {
int srcSize = src.size();
if (srcSize > dest.size())
throw new IndexOutOfBoundsException("Source does not fit in dest");
if (srcSize < COPY_THRESHOLD ||
(src instanceof RandomAccess && dest instanceof RandomAccess)) {
for (int i=0; idi=dest.listIterator();
ListIterator extends T> si=src.listIterator();
for (int i=0; i
java面试 泛型_Java面试题五:Java 的泛型, super T 和 extends T 的区别相关推荐
- java comparable接口_Java面试题之Java集合篇三
Java面试题之Java集合篇三1.HashMap和HashTable有何不同? (1)HashMap允许key和value为null,而HashTable不允许. (2)HashTable是同步的, ...
- java面试心得_Java面试题分享(一)Spring总结
最近有时间,整理了一下面试的心得和一些问题,给面试java岗位的小伙伴做个参考.重点部分我会用别的颜色标注一下 1.1.说一下你对 Spring 的理解? 关于 Spring 的话,我们平时做项目一直 ...
- java面试 socket_【面试题】Java 的通信编程,编程题(或问答),用JAVA SOCKET 编程,读服务器几个字符,再写入本地显示?...
答:Server端程序: packagetest; importjava.net.*; importjava.io.*; publicclass Server{ privateServerSocket ...
- futuretask java 并发请求_Java面试题整理一(侧重多线程并发)
1..是否可以在static环境中访问非static变量? 答:static变量在Java中是属于类的,它在所有的实例中的值是一样的.当类被Java虚拟机载入的时候,会对static变量进行初始化.如 ...
- java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象. ArrayList list ...
- Java 泛型中? super T和? extends T的区别
原文链接 李璟(jlee381344197@gmail.com) 经常发现有List<? super T>.Set<? extends T>的声明,是什么意思 ...
- 史上最全面Java面试汇总(面试题+答案)
微信搜索:"二十同学" 公众号,欢迎关注一条不一样的成长之路 JAVA面试精选[Java基础第一部分] JAVA面试精选[Java基础第二部分] JAVA面试精选[Java基础第三 ...
- 阿里10W字JAVA面试手册(面试题+简历攻略)
金九银十在即,想跳槽大厂的小伙伴们还在为面试发愁吗?10W字阿里JAVA面试手册,总有一篇可以帮助你解决烦恼. 基础篇 1.Java语言有哪些特点 2.面向对象和面向过程的区别 3.八种基本数据类型的 ...
- 【java面试】6万字最全Java知识体系梳理,还在找面试题?看这篇就够啦
文章目录 一.基础 1.1JVM 1.JVM五大内存区域 2.新生代和老年代 3.加载类的过程 4.OOM 5.JVM调优 1.2 GC 1.可达性分析 2.java中的引用 3.GC回收算法 4.G ...
最新文章
- TCP连接状态详解及TIME_WAIT过多的解决方法
- Mysql错误: Lock wait timeout exceeded 解决办法
- MySQL 数据库sql命令查询被锁的表实例演示,mysql的锁表与解锁,mysql强制解锁杀掉进程,mysql查询锁表一直转圈
- 【js】版本号对比处理方案
- 解决uni-app中flex布局子元素宽度溢出
- python把列表写入excel_用Python将列表写入Excel文件
- ABAP string函数一览
- 单例(Singleton)设计模式应用场景
- mysql 学习笔记13 查询语句强化
- 创宇技能表_知道创宇研发技能表 一
- matlab 判断两个矩阵有元素相等_如何使用MATLAB对Excel中的多参数进行计算?
- R语言聚类算法之k中心聚类(K-medoids)
- html的canvas显示数字,HTML5效果:Canvas 实现圆形进度条并显示数字百分比
- 具体案例 快速原型模型_快速原型模型
- 超难打地鼠 【安卓游戏】
- 压电式雨量传感器数字感知降雨量
- 中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么?
- atitit.研发企业与团队文化的结构框架 企业文化建设方案3.0
- 回头再说--英雄 汪峰
- 软件测试/测试开发丨必知必会的Docker 命令