相关文章:

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 的区别相关推荐

  1. java comparable接口_Java面试题之Java集合篇三

    Java面试题之Java集合篇三1.HashMap和HashTable有何不同? (1)HashMap允许key和value为null,而HashTable不允许. (2)HashTable是同步的, ...

  2. java面试心得_Java面试题分享(一)Spring总结

    最近有时间,整理了一下面试的心得和一些问题,给面试java岗位的小伙伴做个参考.重点部分我会用别的颜色标注一下 1.1.说一下你对 Spring 的理解? 关于 Spring 的话,我们平时做项目一直 ...

  3. java面试 socket_【面试题】Java 的通信编程,编程题(或问答),用JAVA SOCKET 编程,读服务器几个字符,再写入本地显示?...

    答:Server端程序: packagetest; importjava.net.*; importjava.io.*; publicclass Server{ privateServerSocket ...

  4. futuretask java 并发请求_Java面试题整理一(侧重多线程并发)

    1..是否可以在static环境中访问非static变量? 答:static变量在Java中是属于类的,它在所有的实例中的值是一样的.当类被Java虚拟机载入的时候,会对static变量进行初始化.如 ...

  5. java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。

    java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象. ArrayList list ...

  6. Java 泛型中? super T和? extends T的区别

    原文链接          李璟(jlee381344197@gmail.com) 经常发现有List<? super T>.Set<? extends T>的声明,是什么意思 ...

  7. 史上最全面Java面试汇总(面试题+答案)

    微信搜索:"二十同学" 公众号,欢迎关注一条不一样的成长之路 JAVA面试精选[Java基础第一部分] JAVA面试精选[Java基础第二部分] JAVA面试精选[Java基础第三 ...

  8. 阿里10W字JAVA面试手册(面试题+简历攻略)

    金九银十在即,想跳槽大厂的小伙伴们还在为面试发愁吗?10W字阿里JAVA面试手册,总有一篇可以帮助你解决烦恼. 基础篇 1.Java语言有哪些特点 2.面向对象和面向过程的区别 3.八种基本数据类型的 ...

  9. 【java面试】6万字最全Java知识体系梳理,还在找面试题?看这篇就够啦

    文章目录 一.基础 1.1JVM 1.JVM五大内存区域 2.新生代和老年代 3.加载类的过程 4.OOM 5.JVM调优 1.2 GC 1.可达性分析 2.java中的引用 3.GC回收算法 4.G ...

最新文章

  1. TCP连接状态详解及TIME_WAIT过多的解决方法
  2. Mysql错误: Lock wait timeout exceeded 解决办法
  3. MySQL 数据库sql命令查询被锁的表实例演示,mysql的锁表与解锁,mysql强制解锁杀掉进程,mysql查询锁表一直转圈
  4. 【js】版本号对比处理方案
  5. 解决uni-app中flex布局子元素宽度溢出
  6. python把列表写入excel_用Python将列表写入Excel文件
  7. ABAP string函数一览
  8. 单例(Singleton)设计模式应用场景
  9. mysql 学习笔记13 查询语句强化
  10. 创宇技能表_知道创宇研发技能表 一
  11. matlab 判断两个矩阵有元素相等_如何使用MATLAB对Excel中的多参数进行计算?
  12. R语言聚类算法之k中心聚类(K-medoids)
  13. html的canvas显示数字,HTML5效果:Canvas 实现圆形进度条并显示数字百分比
  14. 具体案例 快速原型模型_快速原型模型
  15. 超难打地鼠 【安卓游戏】
  16. 压电式雨量传感器数字感知降雨量
  17. 中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么?
  18. atitit.研发企业与团队文化的结构框架 企业文化建设方案3.0
  19. 回头再说--英雄 汪峰
  20. 软件测试/测试开发丨必知必会的Docker 命令

热门文章

  1. Linux基础笔记1
  2. 源码大招:不服来战!撸这些完整项目,你不牛逼都难!
  3. 3.2. @RestController
  4. Ansible一键部署CDH
  5. Zabbix3.0安装文档
  6. 开发技巧(3-1)Eclipse查找关键字
  7. MySQL查看表占用空间大小(转)
  8. 我的第一份外包经历及所得
  9. oracle11g 导出表报EXP-00011:table不存在。
  10. 润米咨询创始人刘润:传统企业数字化转型之道