Java学习——泛型通配符

Java泛型的通配符?(问号)是一种特殊的类型参数,用于表示未知的类型。通配符可以在使用泛型类型时提高代码的灵活性,使得一个泛型容器能够引用多种不同类型的泛型对象。主要有三种类型的通配符使用场景:无界通配符、有界通配符(上界和下界)。

1. 无界通配符(?

无界通配符?表示任意类型,它的主要用途是在读取或操作集合时,表示你不关心集合中元素的具体类型。

示例
public void printList(List<?> list) {for (Object item : list) {System.out.println(item);}
}

这里的List<?>表示一个未知类型元素的列表,printList方法可以接受任何类型的List对象。

2. 有界通配符

有界通配符限制了未知类型的范围,包括上界通配符(? extends Type)和下界通配符(? super Type)。

上界通配符(? extends Type

上界通配符? extends Type表示类型的上限,它意味着任何继承自Type的类型都可以被接受。

public void printNumbers(List<? extends Number> list) {for (Number num : list) {System.out.println(num);}
}

这里的List<? extends Number>可以接受List<Integer>List<Double>等任何Number子类的列表。

下界通配符(? super Type

下界通配符? super Type表示类型的下限,它允许列表引用Type类型或任何Type的父类型。

public void addNumbers(List<? super Integer> list) {list.add(10); // 可以添加Integer或其子类的实例
}

这里的List<? super Integer>可以是List<Integer>List<Number>List<Object>等。

通配符的使用原则

  • 如果你需要从集合中读取类型T的数据,并且不能写入,可以使用? extends T(生产者)。
  • 如果你需要向集合中写入类型T的数据,并且不需要读取,可以使用? super T(消费者)。
  • 如果既不需要读取也不需要写入,可以使用无界通配符?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/702823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络防御-内容安全

目录 内容安全IAE引擎DFI和DPI技术 --- 深度检测技术DPI --- 深度包检测技术DFI --- 深度流检测技术 入侵防御&#xff08;IPS&#xff09;入侵检测的方法异常检测误用检测 签名ID --- 签名的标识检测范围 内容安全 攻击可能只是一个点&#xff0c;防御需要全方面进行 IAE引擎 …

表单进阶--复选框

radio&#xff1a;单选框&#xff08;单选&#xff09; checkbox&#xff1a;多选框&#xff08;多选&#xff09; 语法&#xff1a;<input type"radio/checkbox" value"值" name"名称" checked"checked"/> type&am…

2 easy 27. 移除元素

双指针法 复杂度&#xff1a; //给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 // // 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 // // 元素的顺…

【大数据】Flink SQL 语法篇(四):Group 聚合

Flink SQL 语法篇&#xff08;四&#xff09;&#xff1a;Group 聚合 1.基础概念2.窗口聚合和 Group 聚合3.SQL 语义4.Group 聚合支持 Grouping sets、Rollup、Cube 1.基础概念 Group 聚合定义&#xff08;支持 Batch / Streaming 任务&#xff09;&#xff1a;Flink 也支持 G…

RCE (Remote ????? execution) --->CTF

看这个标题就知道今天的内容不简单&#xff01;&#xff01;&#xff01;&#xff01; 那么就来讲一下我们的RCE吧 目录 ​编辑 1. &&#xff1f; |&#xff1f; ||&#xff1f; &&&#xff1f; 2.PHP命令执行函数&& ||"" 1."" &…

6、进程、服务管理

一、进程管理 1.概述 进程是正在执行的程序或命令&#xff0c;每一个进程都独立运行&#xff0c;都有自己的地址空间&#xff0c;并占用一定的系统资源以后开发会遇见&#xff1a; 端口占用出现程序假死、卡死 2.查看系统运行进程 语法 ps 参数ps –a:显示当前终端下的所有…

智能SQL生成:后端技术与LLM的完美结合

文章目录 引言一、什么是大模型二、为什么选择LLM三、开发技术说明四、系统架构说明五、编码实战1. Maven2. 讯飞大模型配置类3. LLM相关的封装4. 编写LLM的service5. 编写controller6. 运行测试 六、总结 引言 本篇文章主要是关于实现一个类似Chat2DB的根据自然语言生成SQL的…

开源工具和框架

目录 开源工具和框架 一、 开源工具和框架 二、开源工具和框架在现代软件开发中的角色 1、基础设施建设&#xff1a; 2、开发效率提升&#xff1a; 3、代码质量保障&#xff1a; 4、技术创新&#xff1a; 三、广泛使用的开源项目分析 3.1、Linux 3.2、Git 3.3、Docke…

Unity接入讯飞的大数据模型

原&#xff1a;基于C#WPF编写的调用讯飞星火大模型工具_c#xf$xccx-CSDN博客 记录一下以防以后用到。 using Newtonsoft.Json; using System.Collections.Generic;public class JsonResponse {[JsonProperty("header")]public ResponseHeader Header { get; set; }[…

上一篇文章补充:已经存在的小文件合并

对于HDFS上已经存在的大量小文件问题&#xff0c;有多种策略可以进行处理和优化&#xff1a; 1. **合并小文件**&#xff1a; - **使用Spark作业合并**&#xff1a;通过编写Spark程序读取小文件并调用repartition()或coalesce()函数重新分区数据&#xff0c;然后将合并后的…

【Java程序设计】【C00313】基于Springboot的物业管理系统(有论文)

基于Springboot的物业管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的物业管理系统&#xff0c;本系统有管理员、物业、业主以及维修员四种角色权限&#xff1b; 管理员进入主页面&#xff0c;主要功能包…

opengl播放3d pose 原地舞蹈脚来回飘动

目录 opengl播放3d pose 原地舞蹈脚来回飘动 设置相机视角 opengl播放3d pose 原地舞蹈脚来回飘动 opengl播放3d pose 原地舞蹈时,脚来回飘动,正常状态是脚应该不动的。 经过反复分析实验验证,找到原因是,渲染计算3d坐标时,都要减去一个offset,这个offset是髋关节的坐…

【LeetCode-474】一和零(动态规划)

目录 LeetCode474.一和零 题目描述 思路1&#xff1a;动态规划 代码实现 题目链接 题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的…

mybatis总结传参三

十、&#xff08;不推荐&#xff09;多个参数-按位置传参 参数位置从 0 开始&#xff0c; 引用参数语法 #{ arg 位置 } &#xff0c; 第一个参数是 #{arg0}, 第二个是 #{arg1} 注意&#xff1a; mybatis-3.3 版本和之前的版本使用 #{0},#{1} 方式&#xff0c; 从 myba…

CCAA森林管理体系基础考试大纲

森林管理体系基础考试大纲&#xff08;第1版&#xff09; 1.总则 本大纲依据 CCAA《管理体系审核员注册准则》制定&#xff0c;适用于拟向CCAA申请注册森林管理体系审核员实习级别的人员。 2.考试要求 2.1考试科目 申请注册森林管理体系审核员实习级别的人员&#xff0c;需…

Ubuntu中Python3找不到_sqlite3模块

今天跑一个代码&#xff0c;出现了一个找不到sqlite3模块的错误&#xff0c;错误如下: from _sqlite3 import * ModuleNotFoundError: No module named _sqlite3 网上查资料说&#xff0c;因为python3没有自带sqlite3相关方面的支持&#xff0c;要自己先安装然后再重新编译Py…

stream流-> 判定 + 过滤 + 收集

List<HotArticleVo> hotArticleVos hotArticleVoList .stream() .filter(x -> x.getChannelId().equals(wmChannel.getId())).collect(Collectors.toList()); 使用Java 8中的Stream API对一个名为hotArticleVoList的列表进行过滤操作&#xff0c;筛选出符合指定条件…

SQL进阶(三):Join 小技巧:提升数据的处理速度

复杂数据结构处理&#xff1a;Join 小技巧&#xff1a;提升数据的处理速度 本文是在原本sql闯关的基础上总结得来&#xff0c;加入了自己的理解以及疑问解答&#xff08;by GPT4&#xff09; 原活动链接 用到的数据&#xff1a;链接 提取码&#xff1a;l03e 目录 1. 课前小问…

stable-diffusion-webui+sadTalker开启GFPGAN as Face enhancer

接上一篇&#xff1a;在autodl搭建stable-diffusion-webuisadTalker-CSDN博客 要开启sadTalker gfpgan as face enhancer&#xff0c; 需要将 1. stable-diffusion-webui/extensions/SadTalker/gfpgan/weights 目录下的文件拷贝到 :~/autodl-tmp/models/GFPGAN/目录下 2.将G…

Spring Boot Profiles简单介绍

Spring Boot application.properties和application.yml文件的配置 阅读本文之前&#xff0c;请先阅读上面的配置文件介绍。 Spring Boot Profiles是一个用于区分不同环境下配置的强大功能。以下是如何在Spring Boot应用程序中使用Profiles的详细步骤和代码示例。 1. 创…