用 extends 父类型>标识上边界通配符,用于表示实例化时可以确定父类型的未知类型

用 super 子类型>标识下边界通配符,用于表示实例化时可以确定子类型的未知类型

例子

public class JavaPromgramer extends Promgramer

public class Promgramer extends ITWorker

public class ITWorker extends Worker

public class Worker extends Person

public class PersonContainer {

private T t;

public void setT(T t) {

this.t = t;

}

public T getT() {

return t;

}

}

//泛型上届限定

PersonContainer extends Worker> container1 = new PersonContainer<>();

// 对于set方法,传入参数可以肯定的是类型是Worker的子类,

// 具体是哪一个子类不确定,在存入的时候可能会把参数向Worker的

// 子类向下转型存在安全隐患所以jvm会报编译错误

// container1.setT(new Person());

// container1.setT(new Worker());

// container1.setT(new Promgramer());

// 对于get方法,保存的数据类型肯定是Worker的子类,

// 当取出来时也肯定是Worker的子类,此时用Worker或它的父类去接收是可以的,

// 因为子类向上转型成父类是隐式的

Worker t = container1.getT();

//泛型下届限定

PersonContainer super Promgramer> container2 = new PersonContainer<>();

// 对于set方法,可以肯定的是保存的参数的类型是Promgramer的父类,

// 如果我存入的是Promgramer或它的子类的话,然后jvm自动向上转型成Promgramer或它的父类

// 是没有任何问题的,我也不需要关心具体是哪个父类。

// 如果存入的是Promgramer的父类的话就和上边界的set方法一样了。

// container2.setT(new Person()); //报错

container2.setT(new Promgramer());

container2.setT(new JavaPromgramer());

// 对于get方法,传入的参数可以肯定的是类型是Promgramer的父类,

// 具体是哪一个父类jvm不知道,但可以肯定的是,Object是所有java类的父类

// 所以取出数据时用Object去接收是可以的,其它的就不行。

Object t1 = container2.getT();

与>的区别

:泛型标识符,用于泛型定义(类、接口、方法等)时,可以想象成形参。

>:通配符,用于泛型实例化时,可以想象成实参。

java 边界_Java泛型中的上下边界的理解相关推荐

  1. java中super()_Java 泛型中 extends 和 super 的区别是什么?

    <? extends T> 和 <? super T> 是 Java 泛型中的 "通配符(Wildcards)" 和 "边界(Bounds)&qu ...

  2. java super extend 区别_Java泛型中extends和super的区别

    extends T>和 super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. extends T&g ...

  3. java泛型的上界和下界_java泛型中的上界(extend)和下界(super)

    泛型中上界和下界的定义 上界 extend Fruit> 下界 super Apple> 上界和下界的特点 上界的list只能get,不能add(确切地说不能add出除null之外的对象, ...

  4. Java泛型中extends和super的理解(转)

    E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类) K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定 ...

  5. java泛型类指定多个泛型_Java泛型中的多态

    java泛型类指定多个泛型 从作为Java程序员的早期开始,我们都知道如何实例化和使用Collection对象. 实例化为具体类的List接口将如下所示. List myArrayList = new ...

  6. java泛型extend使用_java泛型中的? extend E 和 ? super E

    public class TestType { public static void main(String[] args) { //? extend B,在定义泛型时,只能接受B或B的子类 List ...

  7. java dog类型_java泛型中?和T有什么区别?

    public static void printColl(ArrayList> al){ Iterator> it = al.iterator(); while(it.hasNext()) ...

  8. 泛型 java 总结_JAVA泛型总结

    泛型是JDK1.5的新东西,总结了一下,以后备忘, 泛型也叫generics,泛型分泛型方法和泛型类,两种定义方式,泛型还有上界下界的说法, 先看看什么叫泛型方法和泛型类,一下是网上的一个解释,个人觉 ...

  9. java 协变性_Java 泛型 协变性、逆变性

    Java 泛型 协变性.逆变性 @author ixenos 摘要:协变性.协变通配符.协变数组.协变返回值 协变性.逆变性和无关性 在面向对象的计算机程序语言中,经常涉及到类型之间的转换,例如从具体 ...

  10. SearchHit转成java对象_Java开发中最常犯的10个错误,你中招了吗?

    http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/ 阅读目录 Array转ArrayList 判断一个数 ...

最新文章

  1. Java学习笔记二十五:Java面向对象的三大特性之多态
  2. 移动H5前端性能优化指南[转]
  3. 设置maxJsonLength,解决ajax通过POST方式调用.net的webService时,数据过长时服务器返回500错误的问题
  4. shell 统计一个词出现的概率_如何在Mac上设置系统范围的字数统计服务
  5. UA MATH563 概率论的数学基础 鞅论初步8 鞅收敛定理
  6. 如何在JavaScript中使用自定义事件
  7. Boost::context模块callcc的stack测试程序
  8. html5基础知识点表单
  9. php数组foreach循环添加键值对_在PHP的foreach循环中插入一个$key作为变量
  10. 关于NPN和PNP传感器的应用区别(转载)
  11. object detection训练自己数据
  12. 利用元数据管理数据质量
  13. PDFBox-convertToImage-type not implemented yet
  14. 数据库mysql的注释怎么加_mysql表如何添加字段注释
  15. 对Javascript的原型,原型链和继承的个人理解
  16. web安全详解(渗透测试基础)
  17. 这些好用的抠图软件,助你实现一键抠图
  18. 阿里云服务器搬迁记录(2021年3月)
  19. 零基础玩转C语言系列第一章——初始C语言(上)
  20. haproxy log日志简单记录

热门文章

  1. 看微软“第四代模块化数据中心”宣传片之后的思考
  2. 拓端tecdat|R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
  3. 拓端tecdat|python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
  4. 拓端tecdat|R语言使用混合模型进行聚类
  5. 【大数据部落】用R语言进行网站评论文本挖掘聚类
  6. 拓端tecdat|R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
  7. 东财mysql作业_20春东财《MySQL数据库系统及应用》单元作业三(答案100分)
  8. fuzzy仿真 MATLAB,基于Matlab的Fuzzy-PID控制器的设计与仿真
  9. 【论文笔记】HyperFace: ADeep Multi-task Learning Framework for Face Detection
  10. yolov5s 目标检测模型实战——火点烟雾检测实战