Java泛型通配符extends与super

 

Java 泛型

关键字说明

  • ? 通配符类型
  • <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类
  • <? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object

extends 示例

static class Food{}
static class Fruit extends Food{}
static class Apple extends Fruit{}
static class RedApple extends Apple{}

List<? extends Fruit> flist = new ArrayList<Apple>();
// complie error:
// flist.add(new Apple());
// flist.add(new Fruit());
// flist.add(new Object());
flist.add(null); // only work for null 

List<? extends Frut> 表示 “具有任何从Fruit继承类型的列表”,编译器无法确定List所持有的类型,所以无法安全的向其中添加对象。可以添加null,因为null 可以表示任何类型。所以List 的add 方法不能添加任何有意义的元素,但是可以接受现有的子类型List<Apple> 赋值。

Fruit fruit = flist.get(0);
Apple apple = (Apple)flist.get(0);

由于,其中放置是从Fruit中继承的类型,所以可以安全地取出Fruit类型。

flist.contains(new Fruit());
flist.contains(new Apple());

在使用Collection中的contains 方法时,接受Object 参数类型,可以不涉及任何通配符,编译器也允许这么调用。

super 示例

List<? super Fruit> flist = new ArrayList<Fruit>();
flist.add(new Fruit());
flist.add(new Apple());
flist.add(new RedApple());

// compile error:
List<? super Fruit> flist = new ArrayList<Apple>();

List<? super Fruit> 表示“具有任何Fruit超类型的列表”,列表的类型至少是一个 Fruit 类型,因此可以安全的向其中添加Fruit 及其子类型。由于List<? super Fruit>中的类型可能是任何Fruit 的超类型,无法赋值为Fruit的子类型Apple的List<Apple>.

// compile error:
Fruit item = flist.get(0);

因为,List<? super Fruit>中的类型可能是任何Fruit 的超类型,所以编译器无法确定get返回的对象类型是Fruit,还是Fruit的父类Food 或 Object.

小结

extends 可用于的返回类型限定,不能用于参数类型限定。
super 可用于参数类型限定,不能用于返回类型限定。
>带有super超类型限定的通配符可以向泛型对易用写入,带有extends子类型限定的通配符可以向泛型对象读取。——《Core Java》
Java泛型通配符?extends与?super的区别与使用场景 我们的目的是让大家清楚地了解Java泛型通配符中?extends和?super的不同之处,以及在什么情况下使用它们。范围主要涵盖这两个通配符的原理、区别和实际应用场景。首先我们会用有趣的故事引入泛型通配符的概念,然后详细解释核心概念,接着分析它们之间的关系,再通过代码示例展示具体的操作步骤,最后介绍实际应用场景、未来发展趋势等内容。Java泛型:就像一个神奇的盒子,这个盒子可以装不同类型的东西,但在使用的时候可以规定它只能装某一类特定的东西。通配符。 阅读详情

相关推荐

Java 之泛型通配符 ? extends T 与 ? super T 通配符解惑

? super T

m0_45406092的博客 2152

JAVA------通配符篇(上下界)

extends Person>只能取数据。super Person>只能存数据。

Thrive的博客 1280

Java-泛型编程-使用通配符? extends 和 ? super

泛型中使用通配符有两种形式:子类型限定<? extends xxx>和超类型限定<? super xxx>。

NowOrNever 1万+

Java 泛型:上界通配符和下界通配符的用途和限制

上界通配符(extends T>:用于只需要读取数据的场景,因为它允许使用T的任何子类,但禁止写入数据以保证类型安全。下界通配符(super T>:用于只需要写入数据的场景,因为它允许向集合中添加T及其子类,但读取的数据只能保证是Object类型。上吐下泻有上限只能读(吐),有下限只能写(泻)希望这篇文章能帮助你更好地理解和应用Java泛型中的上界通配符和下界通配符。如果你有任何问题或建议,欢迎在评论区留言!

qq_42798343的博客 1487

Java泛型之上界下界通配符详解

主要介绍了Java泛型之上界下界通配符详解,学习使用泛型编程时,更令人困惑的一个方面是确定何时使用上限有界通配符以及何时使用下限有界通配符。本文提供一些设计代码时要遵循的一些准则。,需要的朋友可以参考下

数字IC后端时序违例修复:setup/hold冲突与时钟树优化实战

时序收敛是数字IC后端设计中最关键的环节之一,直接影响芯片能否在目标频率下稳定工作。建立时间与保持时间的本质是寄存器对数据稳定性的物理约束,而实际工程中,setup违例和hold违例往往此消彼长,冲突的根源在于数据路径与时钟路径的延迟匹配。时钟树综合(CTS)作为连接逻辑与物理的关键步骤,其skew、insertion delay和transition的优化直接决定了时序修复的成败。通过useful skew技术、合理的单元替换和路径结构调整,可以系统性地解决setup/hold冲突,实现时序收敛。本文结合

weixin_28292761的博客 224

Java 泛型通配符

Java泛型通配符, 常用的 ?, T, E, K, V, N的含义,类型擦除,上界通配符 < ?extends E> ,下界通配符 < ?super E>,PECS原则,?和 T 和 Object 的区别

专业深耕,技术前沿 1086

从仿真到实物:Realsense D435+ROS2焊接机械臂的视觉标定与数据验证指南

本文详细介绍了如何将Realsense D435相机与ROS2焊接机械臂从仿真环境迁移到实物部署的全过程。通过视觉标定、数据验证和焊接场景优化,确保系统在真实环境中精准可靠。重点讲解了硬件配置、驱动优化、数据一致性验证及焊接应用的特殊处理,为工业自动化开发者提供实用指南。

weixin_28701593的博客 407

Java泛型通配符深度解析:无限定、上界、下界通配符全面掌握

泛型通配符如同一个无形的手,操控着程序的行进方向,让程序的逻辑更加严密,更加安全。泛型通配符,顾名思义,它是泛型的一种特殊形式,用于表示各种类型的泛型。你可能会问,为什么我们需要它呢?其实,当我们在开发过程中,经常会遇到一种情况,就是我们无法确定一个集合的具体类型,或者我们需要表示任何类型的情况,这时候,泛型通配符就派上了用场。它的出现,不仅让我们的代码更加灵活,而且也让我们的程序更加健壮。在接下来的内容中,我们将会深入探讨泛型通配符的各种形式,包括无限定通配符、上界通配符和下界通配符。

万猫学社 3787

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1281

QT6实现USB摄像头接入显示与抓拍功能实现

QT实现USB摄像头接入显示 一、UVC协议简介 UVC全称是USB Video Class(USB视频类),是一种标准化的USB视频设备通信协议,它定义了摄像头与主机之间的数据传输协议和格式。 UVC协议的出现,解决了摄像头厂商之间互不兼容,以及摄像头应用开发与平台之间的散乱问题。 UVC标准是由USB-IF主导制定的,目前最新的版本是UVC 1.5,UVC的缺省设置类容易实现,不需要额外的驱动程序。

热土程序园,利他愉己~ 3417

【Java教程】Day8-6 泛型:extends 和 super 通配符

在Java的泛型中,通配符(wildcards)是一个强大的工具,能够帮助我们更灵活地处理不同类型的集合。extends和super是常用的通配符,分别对应着"上界"和"下界",它们的使用方式对于泛型方法的定义和操作具有重要影响。本文将通过具体的代码示例,帮助大家深入理解extends和super通配符的使用场景和区别。

max202011161630的博客 995

选课系统进不去?我用 Python 做了个“捡漏挂机”脚本,全自动监控空余名额

频率控制:脚本请求频率不要太高(建议间隔 3-5 秒以上),否则可能被教务系统封 IP,甚至会被教务处请喝茶。仅供学习:本文旨在通过选课场景教学requests和网络抓包原理,请勿用于非法用途或破坏公平性。刷新页面 -> 等待加载 -> 用眼睛看人数 -> 没满?-> 点击选课 -> 确认这个流程最大的瓶颈在于**“等待加载”和“人的反应时间”**。网页加载需要渲染 HTML、CSS、图片,而 Python 脚本只需要请求一个微小的 JSON 数据接口,速度是浏览器的10 倍以上。fill:#333;

BUG猿的博客 293

这一文,关于 Java 泛型的点点滴滴 二 (extends、super、<?> 通配符、泛型与反射)

本文在上一篇的基础上,介绍了 extends 、super 、?等泛型中的通配符,并在最后介绍了使用泛型获取泛型信息,阅读本文大家会对 Java 泛型有一个更深的理解。

李斯维的博客空间 1749

汽车信息安全--SHE中的密钥管理(二)

上一篇我们讲解了HTA基本概念,SHE和EVITA HSM区别以及SHE的架构,接下来我们聊一聊SHE中的密钥管理策略。

认真搞搞汽车MCU 2405

进阶06:C#连接TwinCAT 3使用ADS通讯

本文介绍了使用C#通过ADS协议与倍福TwinCAT3 PLC通讯的实现方法。主要内容包括:1)在两台电脑上安装TwinCAT3开发环境并建立网络连接;2)在TwinCAT中定义变量和结构体;3)使用C# Winform开发界面,通过TwinCAT.Ads.dll实现读写功能;4)实现主动读取和通知两种数据获取方式。详细说明了连接建立、变量定义、读写操作及事件通知的实现代码。该方案实现了对PLC寄存器数据的实时监控和操作,为工业控制系统的开发提供了参考。

weixin_38637405的博客 3689

深入理解 Java 泛型的通配符:? extends T 和 ? super T

本文介绍了Java泛型中的通配符机制,重点分析了? extends T(上界通配符)和? super T(下界通配符)的使用场景与特性。上界通配符允许安全读取数据但不能写入,而下界通配符支持写入操作但只能读取Object类型数据。文章通过代码示例演示了两种通配符的实际应用,并解释了PECS原则(Producer Extends, Consumer Super)来指导正确选择通配符类型。最后展示了通配符在数据拷贝场景中的具体应用,帮助开发者编写更灵活可靠的泛型代码。

Knight 900

SpringCloud Alibaba - Seata 实现高可用和异地容灾

这里不仅仅要实现高可用,还需要实现异地容灾. 异地容灾就是说,如果你整了好几个节点部署起来,全部放到一个机房里面,那么如果这个机房出了故障,就意味着整个集群就完了,所以对于一个大型的集群来讲,都会把这些服务异地部署.问题2:如果我们要实现异地容灾,也就说某一个机房挂了,需要快速的切换到另一个可用的机房,但是这个配置在配置文件中写死了,如果要改配置文件,还需要重启服务器,这是我们不希望看到的,怎么办?进入 seata/bin 目录,运行 seata-server.bat 文件,默认端口为 8091。

CYK_byte的博客 976

【java基础】泛型的通配符(extends,super,?)

这一节感觉自己都有点模糊,java核心卷在泛型这章讲的真的是晦涩难懂,如果上面有说错的地方,欢迎大家私信或者评论区指出。关于泛型的更多知识,参考以下内容泛型程序设计基础类型擦除、桥方法、泛型代码和虚拟机泛型的限制及其继承规则泛型的通配符(extends,super,?泛型程序设计基础类型擦除、桥方法、泛型代码和虚拟机泛型的限制及其继承规则泛型的通配符(extends,super,?

秃头披风侠的博客 1672

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java基础27-Java 泛型:泛型擦除原理与通配符实战(? extends vs ? super)

Java泛型擦除与通配符实战解析 本文深入探讨Java泛型的核心机制——类型擦除,并重点解析通配符? extends与? super的使用场景。主要内容包括: 泛型基础:通过类型参数实现代码复用和类型安全 类型擦除原理:运行时泛型信息被擦除,替换为边界类型或Object 通配符详解: 无界通配符?的读取限制 ? extends T(生产者)支持安全读取但禁止写入 ? super T(消费者)支持安全写入但限制读取类型 文章通过代码示例验证类型擦除现象,并解释PECS原则(Producer-Extends,

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java 泛型通配符 <? extends> vs <? super> 实战场景对比

本文解析Java泛型通配符<? extends T>和<? super T>的核心区别与应用场景。关键点包括: PECS法则:生产者(Producer)用<? extends T>仅读取数据,消费者(Consumer)用<? super T>仅写入数据 类型安全: <? extends T>可安全读取为T类型,但禁止写入(除null) <? super T>可写入T及其子类,但读取时仅能转为Object 实战场景: 统计集合总和(生产者

m0_67391377的博客 803

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java - 泛型,extends通配符,super通配符,泛型和反射

目录 泛型 什么是泛型 向上转型 小结 擦拭法 不恰当的覆写方法 泛型继承 小结 extends通配符 extends通配符的作用 使用extends限定T类型 小结 super通配符 对比extends和super通配符 PECS原则 无限定通配符 小结 泛型和反射 谨慎使用泛型可变参数 小结 泛型 泛型是一种“代码模板”,可以用一套代码套用各种类型。 什么是泛型 在讲解什么是泛型之前,我们先观察Java标准库提供的ArrayList,它可以看作“.

zzqtty的博客 568

Java泛型 extends,super和通配符的理解

1.java泛型的特点 通常情况下,一个编译器处理泛型有两种方式:      1.Code specialization。在实例化一个泛型类或泛型方法时都产生一份新的目标代码(字节码or二进制代码)。例如,针对一个泛型list,可能需要 针对string,integer,float产生三份目标代码。      2.Code sharing。对每个泛型类只生成唯一的一份目标代码;该泛型类的所有

The Void 2082

java contains 通配符_Java泛型 通配符? extends与super

Java 泛型关键字说明? 通配符类型 extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类 super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Objectextends 示例static class Food{}static class Fruit extends Food{}static cl...

weixin_33595935的博客 192
上一篇: asm 之Hello World
sharewind
博客等级 码龄20年 2粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值