java 边界_Java泛型中的上下边界的理解
用 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泛型中的上下边界的理解相关推荐
- java中super()_Java 泛型中 extends 和 super 的区别是什么?
<? extends T> 和 <? super T> 是 Java 泛型中的 "通配符(Wildcards)" 和 "边界(Bounds)&qu ...
- java super extend 区别_Java泛型中extends和super的区别
extends T>和 super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. extends T&g ...
- java泛型的上界和下界_java泛型中的上界(extend)和下界(super)
泛型中上界和下界的定义 上界 extend Fruit> 下界 super Apple> 上界和下界的特点 上界的list只能get,不能add(确切地说不能add出除null之外的对象, ...
- Java泛型中extends和super的理解(转)
E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类) K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定 ...
- java泛型类指定多个泛型_Java泛型中的多态
java泛型类指定多个泛型 从作为Java程序员的早期开始,我们都知道如何实例化和使用Collection对象. 实例化为具体类的List接口将如下所示. List myArrayList = new ...
- java泛型extend使用_java泛型中的? extend E 和 ? super E
public class TestType { public static void main(String[] args) { //? extend B,在定义泛型时,只能接受B或B的子类 List ...
- java dog类型_java泛型中?和T有什么区别?
public static void printColl(ArrayList> al){ Iterator> it = al.iterator(); while(it.hasNext()) ...
- 泛型 java 总结_JAVA泛型总结
泛型是JDK1.5的新东西,总结了一下,以后备忘, 泛型也叫generics,泛型分泛型方法和泛型类,两种定义方式,泛型还有上界下界的说法, 先看看什么叫泛型方法和泛型类,一下是网上的一个解释,个人觉 ...
- java 协变性_Java 泛型 协变性、逆变性
Java 泛型 协变性.逆变性 @author ixenos 摘要:协变性.协变通配符.协变数组.协变返回值 协变性.逆变性和无关性 在面向对象的计算机程序语言中,经常涉及到类型之间的转换,例如从具体 ...
- SearchHit转成java对象_Java开发中最常犯的10个错误,你中招了吗?
http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/ 阅读目录 Array转ArrayList 判断一个数 ...
最新文章
- Java学习笔记二十五:Java面向对象的三大特性之多态
- 移动H5前端性能优化指南[转]
- 设置maxJsonLength,解决ajax通过POST方式调用.net的webService时,数据过长时服务器返回500错误的问题
- shell 统计一个词出现的概率_如何在Mac上设置系统范围的字数统计服务
- UA MATH563 概率论的数学基础 鞅论初步8 鞅收敛定理
- 如何在JavaScript中使用自定义事件
- Boost::context模块callcc的stack测试程序
- html5基础知识点表单
- php数组foreach循环添加键值对_在PHP的foreach循环中插入一个$key作为变量
- 关于NPN和PNP传感器的应用区别(转载)
- object detection训练自己数据
- 利用元数据管理数据质量
- PDFBox-convertToImage-type not implemented yet
- 数据库mysql的注释怎么加_mysql表如何添加字段注释
- 对Javascript的原型,原型链和继承的个人理解
- web安全详解(渗透测试基础)
- 这些好用的抠图软件,助你实现一键抠图
- 阿里云服务器搬迁记录(2021年3月)
- 零基础玩转C语言系列第一章——初始C语言(上)
- haproxy log日志简单记录
热门文章
- 看微软“第四代模块化数据中心”宣传片之后的思考
- 拓端tecdat|R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
- 拓端tecdat|python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
- 拓端tecdat|R语言使用混合模型进行聚类
- 【大数据部落】用R语言进行网站评论文本挖掘聚类
- 拓端tecdat|R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
- 东财mysql作业_20春东财《MySQL数据库系统及应用》单元作业三(答案100分)
- fuzzy仿真 MATLAB,基于Matlab的Fuzzy-PID控制器的设计与仿真
- 【论文笔记】HyperFace: ADeep Multi-task Learning Framework for Face Detection
- yolov5s 目标检测模型实战——火点烟雾检测实战