当前位置: 首页 > news >正文

【Java学习】通配符?

面向对象系列八:泛型(二)

一、通配符?

二、泛型符<>

1.泛型类里

2.泛型类外

2.1使用过程中

2.2使用最后末

三、限制

1.泛型类里的限制

2.延申处的限制

2.1extend限制上界

2.1.1返回值接

2.1.2形参传

2.2super限制下界

2.2.1形参传

2.2.2返回值接


这是泛型初阶的详解:【Java学习】泛型

一、通配符?

泛型,是对类里面的 一套类型的 广泛设定,如果要延申其泛型 到类外 使用此泛型类 的过程中去,就用通配符? 延申其泛型,但泛型不管如何延申,到最后的使用末处 都是一样必须给它指定具体类型 来具体实现


二、泛型符<>

1.泛型类里

泛型类里 就是对这个泛型类的 泛型信息的定义,泛型类里面的 泛型符<> 装的就是 泛型类型的代符就算写 具体已实现有的类型Integer,也是将Integer视为 泛型代符的名字


2.泛型类外

泛型类外 就是对这个泛型类的使用了:

2.1使用过程中

在泛型类外 使用过程中 延申泛型的通配符处 泛型符<>装的就是 对此泛型类的泛型类型的 进一步限制定义


2.2使用最后末

在泛型类外 使用最后末处 泛型符<>装的就是 对泛型类的 指定具体实现类型


三、限制

1.泛型类里的限制

在泛型类里面 就可以有 对其泛型类型的限制,泛型类里面的限制 会影响到 泛型类从定义到使用 的整个过程中


2.延申处的限制

而这里讲的是 在延申泛型处的 对泛型的限制,延申处开始的限制 则会影响的是 泛型类使用处(过程中与最后末)

class Food {
}
class Fruit extends Food {
}
class Apple extends Fruit {
}
class Banana extends Fruit {
}class GenClass<T> {//泛型类GenClassprivate T plate;public T getPlate() {return plate;}public void setPlate(T plate) {this.plate = plate;}
}

2.1extend限制上界

class TestDemo {//泛型类外 使用处void fun(GenClass<? extends Fruit> Greatemp) {//使用过程 延申继续泛型,限制了其 泛型类型的上界//实例对象Greatemp 它里面泛型方法的返回值限制了上界,可对它用 上界及以上 向上转型接Fruit fruit = Greatemp.getPlate();//Fruit上界Food food = Greatemp.getPlate();//Food上界以上}
}
  • 泛型类GenClass里面的 泛型类型? 是继承于Fruit
  • 在使用过程的此时 泛型类GenClass创建出实例对象Greatemp,它此时使用的类 里面的一套泛型类型 都是继承于上界Fruit

—> 实例类用的 方法的形参类型方法返回值类型 都是Fruit或Fruit下面未知的子类

2.1.1返回值接

方法的返回值 设置的是Fruit子类,就可以用Fruit向上转型接收,实现使用过程中 对类实例对象数据的读取


2.1.2形参传

方法的形参 设置的类型是Fruit子类,就不可以调用传Fruit 去向下转型


2.2super限制下界

class TestDemo {//泛型类外 使用处void fun(GenClass<? super Fruit> Greatemp) {//使用过程 延申继续泛型,限制了 其泛型类型的下界//实例对象Greatemp 里面泛型方法的形参限制了下界 可对它用 下界及以下 向上转型传Greatemp.setPlate(new Fruit());//Fruit下界Greatemp.setPlate(new Apple());//Apple下界以下}
}
  • 泛型类GenClass里面的 泛型类型? 的子类是Fruit
  • 在使用过程的此时 泛型类GenClass创建出实例对象Greatemp,它此时使用的类 里面的一套泛型类型 都是在下界Fruit的上面

—> 实例类用的 方法的形参类型方法返回值类型 都是Fruit或Fruit上面未知的父类

2.2.1形参传

方法的形参 设置的类型是Fruit父类,就可以调用传Fruit实现向上转型,实现使用过程中 对类实例对象数据的写入


2.2.2返回值接

方法的返回值 设置的类型是Fruit父类,就不可以用Fruit向下转型接收

http://www.xdnf.cn/news/263233.html

相关文章:

  • Java多语言DApp质押挖矿盗U源码(前端UniApp纯源码+后端Java)
  • 使用 Selenium 爬取动态网页数据 —— 实战与坑点详解
  • 基于LangChain 实现 Advanced RAG-后检索优化(下)-上下文压缩与过滤
  • 将Airtable导入NocoDB
  • 多协议 Tracker 系统架构与传感融合实战 第六章 多传感器时钟同步与数据对齐
  • SETNX的存在问题和redisson进行改进的原理
  • 【RAG】向量?知识库的底层原理:向量数据库の技术鉴赏 | HNSW(导航小世界)、LSH、K-means
  • 【Hive入门】Hive与Spark SQL深度集成:执行引擎性能全面对比与调优分析
  • C语言蓝桥杯真题代码
  • Go反射-通过反射调用结构体的方法(带入参)
  • 解决奥壹oelove婚恋原生小程序上架问题,彻底解决解对问题增强版旗舰版通用
  • 计算机网络八股文--day4 --传输层TCP与UDP
  • WebAPI项目从Newtonsoft.Json迁移到System.Text.Json踩坑备忘
  • 【项目实践】boost 搜索引擎
  • 基于 JSP 和 Servlet 的数字信息分析小应用
  • 【Linux】驱动开发方法
  • ES6/ES11知识点 续一
  • 人工智能发展史 — 物理学诺奖之 Hopfield 联想和记忆神经网络模型
  • 19:常见的Halcon数据格式
  • 优化01-统计信息
  • 深入解析 SqlSugar 与泛型封装:实现通用数据访问层
  • 图论之幻想迷宫
  • 使用Rust + WebAssembly提升前端渲染性能:从原理到落地
  • 网络安全:sql注入练习靶场——sqli_labs安装保姆级教程
  • 【tcp连接windows redis】
  • c++_2011 NOIP 普及组 (1)
  • Python Django基于小波变换的数字水印技术实现系统【附源码、文档说明】
  • (37)VTK C++开发示例 ---纹理地球
  • 多协议 Tracker 系统架构与传感融合实战 第五章 卡尔曼滤波定位算法实战
  • Linux《进程概念(下)》