泛型中上界和下界的定义

上界 extend Fruit>

下界 super Apple>

上界和下界的特点

上界的list只能get,不能add(确切地说不能add出除null之外的对象,包括Object)

下界的list只能add,不能getimport java.util.ArrayList;

import java.util.List;

class Fruit {}

class Apple extends Fruit {}

class Jonathan extends Apple {}

class Orange extends Fruit {}

public class CovariantArrays {

public static void main(String[] args) {

//上界

List extends Fruit> flistTop = new ArrayList();

flistTop.add(null);

//add Fruit对象会报错

//flist.add(new Fruit());

Fruit fruit1 = flistTop.get(0);

//下界

List super Apple> flistBottem = new ArrayList();

flistBottem.add(new Apple());

flistBottem.add(new Jonathan());

//get Apple对象会报错

//Apple apple = flistBottem.get(0);

}

}

这些特点的原因

上界 extend Fruit> ,表示所有继承Fruit的子类,但是具体是哪个子类,无法确定,所以调用add的时候,要add什么类型,谁也不知道。但是get的时候,不管是什么子类,不管追溯多少辈,肯定有个父类是Fruit,所以,我都可以用最大的父类Fruit接着,也就是把所有的子类向上转型为Fruit。

下界 super Apple>,表示Apple的所有父类,包括Fruit,一直可以追溯到老祖宗Object 。那么当我add的时候,我不能add Apple的父类,因为不能确定List里面存放的到底是哪个父类。但是我可以add Apple及其子类。因为不管我的子类是什么类型,它都可以向上转型为Apple及其所有的父类甚至转型为Object 。但是当我get的时候,Apple的父类这么多,我用什么接着呢,除了Object,其他的都接不住。

所以,归根结底可以用一句话表示,那就是编译器可以支持向上转型,但不支持向下转型。具体来讲,我可以把Apple对象赋值给Fruit的引用,但是如果把Fruit对象赋值给Apple的引用就必须得用cast

java泛型的上界和下界_java泛型中的上界(extend)和下界(super)相关推荐

  1. java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回

    java方法带参数返回值 在当前的系列文章中,我正在致力于减少调用Java方法和构造函数所需的参数数量,到目前为止,我一直专注于直接影响参数本身的方法( 自定义类型 , 参数对象 , 构建器模式 , ...

  2. java什么是反射 代码说明_java编程中,常提到的反射代码指的是什么?

    展开全部 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态e5a48de588b662616964757a686964616f31333335326232或行 ...

  3. java组合与继承始示例_Java示例中的组合

    java组合与继承始示例 Composition in java is the design technique to implement has-a relationship in classes. ...

  4. java泛型的实现和原理_java 泛型实现原理

    泛型思想最早在C++语言的模板(Templates)中产生,Java后来也借用了这种思想.虽然思想一致,但是他们存在着本质性的不同. C++中的模板是真正意义上的泛型,在编译时就将不同模板类型参数编译 ...

  5. java编程应该要的英语_java编程中常用英语单词

    JAVA 省略语与名词解释 -------------------------------- J2EETM----JavaTM 2PlatformEnterpriseEdition : J2EE(JA ...

  6. java 异常的分类并举例_Java异常处理中的一些特殊情况举例

    只使用try和finally不使用catch的原因和场景JDK并发工具包中,很多异常处理都使用了如下的结构,如AbstractExecutorService,即只有try和finally没有catch ...

  7. java私有属性和私有方法_Java 9中什么是私有的?

    java私有属性和私有方法 在进行面试时,我发现大多数应聘者都不知道Java中的private修饰符真正意味着什么. 他们对此有所了解,足以应付日常编码,但还远远不够. 这不成问题. 足够了解就足够了 ...

  8. java开发用怎么软件开发_Java 9中的5个功能将改变您开发软件的方式(还有2个不会)...

    java开发用怎么软件开发 有望在Java 9中发布的最令人兴奋的功能是什么? 近期不要对Java 9相对沉默而分心.JDK提交者正在努力准备下一个版本,预计在2015年12月才完成功能的下一个版本. ...

  9. java web 有哪些标签库_java web中jsp常用标签

    在jsp页面开发过程中,经常需要使用JSTL(Java Server Pages Standard Tag Library)标签开开发页面,是看起来更加的规整舒服. JSTL主要提供了5大类标签库:1 ...

最新文章

  1. RIPv2相对于RIPv1来说主要有3方面的改进。下面的选项中,RIPv2的特点不包括【两个题】
  2. R语言入门第五集 实验四:数据分析
  3. Django URL
  4. 阅读类APP体验好不好?可从这些指标衡量
  5. android 手机关机代码非root,怎么用代码判断android手机是否开启了ROOT 权限知道...
  6. 【网络通信与信息安全】之深入分析一个TCP连接可以发多少个HTTP请求相关问题
  7. linux zip 开源工程,7-Zip 18.06 发布,开源数据压缩程序
  8. python画两条曲线_python – 在Matplotlib中绘制两个图之间的线
  9. Java文件类boolean isHidden()方法(带示例)
  10. Git学习03-----最基本的几个命令
  11. SL4A/Py4A直接在adb中用python加载脚本
  12. 360大战QQ,用户被“保护”还是被“偷窥”
  13. 文件管理(操作系统)
  14. 科学绘图软件 Prism 安装教程
  15. VB.NET 使用 OleDb 操作 Access 数据库(来自 MSDN)
  16. iOS冰与火之歌 – Objective-C Pwn and iOS arm64 ROP
  17. uCOS2的events事件源码分析-第4季第5部分-朱有鹏-专题视频课程
  18. 操作系统——CPU调度
  19. 计算机网络:网络层的功能概述
  20. Silverlight入门教程

热门文章

  1. 微软发布的 免费文件恢复工具
  2. Unity 托管内存(Managed Memory)
  3. 5.18 对表格按行进行排序 [原创Excel教程]
  4. HDU 5437by cyl优先队列
  5. Unity3D 的LookAt() 与 LookRotation()方法的比较
  6. [Java][Casssandra] create column family in Casssandra version 1.1.7
  7. 计算机硕士论文质疑数据不够,硕士论文伪造数据 抽检_硕士论文编数据的后果_硕士论文数据造假怎么被发现...
  8. Mybatis批量update修改实例
  9. 贴出最新整理的英语谚语大全(3267条)
  10. 洛谷刷题笔记 地球人口承载力估计