【JAVA】java泛型 详解
java泛型 详解
- 一、参数化类型(Parameterized Type):
- 二. 泛型类(Generic Class):
- 三. 泛型方法(Generic Method):
- 四. 通配符类型(Wildcard Type):
- 五. 类型擦除(Type Erasure):
- 六. 自动装箱和拆箱(Autoboxing and Unboxing):
Java 泛型是一种在编写类、接口和方法时使用参数化类型的机制,它提供了更强大的类型安全性、代码重用性和可读性。下面详细介绍 Java 泛型的一些关键概念:
一、参数化类型(Parameterized Type):
参数化类型是一种在类、接口或方法中使用的类型,它可以接受一个或多个类型参数。例如,List<String> 是一个参数化类型,表示一个元素类型为字符串的列表。
二. 泛型类(Generic Class):
泛型类是具有一个或多个类型参数的类。类型参数可以在类的声明中使用,并在类的实例化时指定具体的类型。例如:
public class Box<T> {private T value;public void setValue(T value) {this.value = value;}public T getValue() {return value;}
}
在上面的例子中,Box<T> 是一个泛型类,T 是类型参数。在创建 Box 类的实例时,可以指定具体的类型,例如 Box<Integer> 或 Box<String>。
三. 泛型方法(Generic Method):
泛型方法是具有一个或多个类型参数的方法。类型参数可以在方法的返回类型之前声明,并在方法调用时指定具体的类型。例如:
public <T> T getObject(T[] array, int index) {return array[index];
}
在上面的例子中,<T> 是类型参数,getObject 方法返回数组中指定索引的元素,且返回类型与数组元素类型相同。
四. 通配符类型(Wildcard Type):
通配符类型是一种特殊的泛型类型,用于表示不确定的类型。通配符类型有三种形式:<?>、<? extends T> 和 <? super T>。参考
【JAVA】泛型,泛型变量,通配符 <?> ,原理及应用详解
【JAVA】 ? super T 和 ? extends T的区别
例如:
<?> 表示任意类型。
<? extends T> 表示某个类的子类。
<? super T> 表示某个类的父类。
通配符类型通常用于方法参数或返回类型中,以提高灵活性。
五. 类型擦除(Type Erasure):
Java 泛型通过类型擦除实现,在编译时会将泛型类型转换为原始类型。这意味着在运行时,泛型类型的信息会被擦除,而泛型参数会被替换为其边界类型或 Object 类型。例如,List<String> 在运行时会被擦除为 List,而 T 会被替换为 Object。
这样做是为了确保泛型代码在运行时能够与之前的非泛型代码兼容,因为 Java 虚拟机(JVM)是在泛型被引入之前就存在的。
例如,考虑以下泛型类的定义:
public class Box<T> {private T value;public T getValue() {return value;}public void setValue(T value) {this.value = value;}
}
在类型擦除之后,编译器会将泛型类型 T 擦除为其边界类型或 Object 类型。因此,上述泛型类的擦除版本可能如下所示:
public class Box {private Object value;public Object getValue() {return value;}public void setValue(Object value) {this.value = value;}
}
类型擦除的结果是,尽管在源代码中使用了泛型类型 T,但在编译后的字节码中,泛型类型信息会被擦除,使得所有类型参数都被替换为它们的擦除类型。这意味着在运行时,不再有关于泛型类型的具体信息可用,这种信息已经在编译时被擦除了。
尽管类型擦除在一定程度上降低了泛型的灵活性,但它确保了与之前版本的兼容性,并且使得泛型代码能够在不同版本的 Java 中正常运行。
六. 自动装箱和拆箱(Autoboxing and Unboxing):
Java 泛型支持自动装箱和拆箱,即自动将基本数据类型转换为相应的包装类(装箱),以及自动将包装类转换为基本数据类型(拆箱)。例如,自动装箱可以将 int 转换为 Integer,而自动拆箱可以将 Integer 转换为 int。主要有以下两个作用:
- 简化代码编写:自动装箱和拆箱使得在基本数据类型和其对应的包装类型之间转换变得更加方便。开发人员不再需要显式地调用
valueOf()和xxxValue()等转换方法,而是可以直接赋值或使用对象,编写更加简洁清晰的代码。 - 增加类型的灵活性:自动装箱和拆箱使得基本数据类型和包装类型之间的转换更加无缝,提高了类型的灵活性。例如,在集合类中,可以直接存储包装类型的对象,而无需手动将基本数据类型转换为包装类型。这使得代码编写更加灵活,可以更方便地处理不同类型的数据。
Java 泛型提供了一种强大的编程机制,可以提高代码的类型安全性、重用性和可读性。它允许开发人员编写通用的代码,以处理各种类型的数据,同时保持代码的简洁和清晰。
相关文章:
【JAVA】java泛型 详解
java泛型 详解 一、参数化类型(Parameterized Type):二. 泛型类(Generic Class):三. 泛型方法(Generic Method):四. 通配符类型(Wildcard Type)&a…...
基于RBAC的权限管理的理论实现和权限管理的实现
权限管理的理论 首先需要两个页面支持,分别是角色管理和员工管理,其中角色管理对应的是角色和权限的配合,员工管理则是将登录的员工账号和员工所处的角色进行对应,即通过新增角色这个概念,让权限和员工并不直接关联&a…...
Atcoder ABC340 C - Divide and Divide
Divide and Divide(分而治之) 时间限制:2s 内存限制:1024MB 【原题地址】 所有图片源自Atcoder,题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例…...
趣学贝叶斯统计:概率密度分布(probability density function)
目录 1. 分布:PDF与PMFPDFPMF 2. 将概率密度函数应用于我们的问题用积分量化连续分布积分度量变化率:导数 3. R语言实践4. 小结 1. 分布:PDF与PMF PDF PDF定义在连续值上。在连续型随机变量的情况下,具体取某个数值的概率是0,因此PDF并不直…...
伦敦金行情分析需要学习吗?
对于伦敦金交易来说,目前大致分成两派,一派是实干派,认为做伦敦金交易重要的是实战,不需要学习太多东西,否则容易被理论知识所局限。另一派则是强调学习,没有理论知识,投资者很难做好伦敦金交易…...
Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…...
服务器遭受 DDoS 攻击的常见迹象有哪些?
服务器遭受 DDoS 攻击的现象很常见,并且有时不容易预防,有部分原因是它们的形式多种多样,而且黑客手段越来越隐蔽。如果您怀疑自己可能遭受 DDoS 攻击,可以寻找多种迹象。以下是 DDoS 攻击的5个常见迹象: 1.网络流量无…...
【机器学习笔记】 15 机器学习项目流程
机器学习的一般步骤 数据清洗 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。 探索性数据分析(EDA 探索性数据…...
【C语言】位操作符与移位操作符练习
目录 前言: 1.一道变态的面试题 2.输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。 方法一: 方法二: 方法三: 3.打印整数二进制的奇数位和偶数位 前言: 前篇我们学习过C语言…...
第十四届“中关村青联杯”全国研究生数学建模竞赛-A题:无人机在抢险救灾中的优化运用
目录 摘 要: 1 问题重述 1.1 问题背景 1.2 待解决的问题 2 模型假设及符号说明...
Android 9.0 Launcher3桌面显示多个相同app图标的解决办法
1.前言 在9.0的系统ROM定制化开发中,在Launcher3的系统原生桌面中,在显示桌面的时候,在禁用和启用app的功能测试的时候,会发现有多个相同app的图标显示在桌面 这对Launcher3的体验效果不是很好,所以为了优化产品,需要解决这个bug,然后让产品更完善 2.桌面显示多个相同…...
WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?
YIA主题设置中默认有4个广告位,而侧边栏的广告位由站长自行添加。boke112百科在这些广告位添加图片广告后发现图片下方有空白,导致下方的两个角没有变圆角,看起来也有点不好看。具体如下图所示: 其实,这个问题就是典型…...
5.15 BCC工具之kvm_hypercall.py解读
一,工具简介 在该示例中,我们可以了解到如何使用eBPF(扩展BPF,Berkeley Packet Filter的扩展)和bcc(BPF Compiler Collection)来分析KVM(Kernel-based Virtual Machine)中的超级调用(hypercall)。 即当exit_reason为VMCALL时,有状态的kvm_entry和kvm_exit记录以及…...
git 解除本地分支与其它分支(远程分支)的关联
开发中,我在同事的分支开一条分支,并将同事的分支作为关联分支,前两天还好,我一个人在干活,然而第3天,同事回来了,他在他那条分支也开发,这时就会出现2种情况, 1. 同时修…...
conda 所有的命令及其讲解
Conda 是一个开源的包管理器和环境管理器,可以用于安装、运行和升级跨平台的软件包和环境。Conda 很流行于数据科学、机器学习、科学计算等领域,因为它能够快速地安装、管理和部署软件包和环境。以下是 Conda 的一些主要命令及其简要说明: 环…...
mysql 数据库主从复制搭建
MySQL 主从复制主要用于实现高可用性和备份。在主从复制中,一个 MySQL 实例(称为主节点)将其数据更改复制到至少一个其他 MySQL 实例(称为从节点)上。主要借助于数据库二进制日志binlog进行数据的复制。 主从数据库对应…...
小白水平理解面试经典题目LeetCode 1025 Divisor Game【动态规划】
1025 除数游戏 小艾 和 小鲍 轮流玩游戏,小艾首先开始。 最初,黑板上有一个数字 n 。在每个玩家的回合中,该玩家做出的动作包括: 选择任意 x,使 0 < x < n 和 n % x 0 。将黑板上的数字 n 替换为 n - x 。 此…...
基于单片机的智能宠物喂食器设计
摘要:阐述智能宠物喂食器的实现方式,以STC89C52单片机为核心芯片,控制LCD的显示、语音芯片的启动和步进电机的运行。通过按键设置预设时间,当时间到达预设时间时,语音电路发出提示,步进电机工作,提供食物。此系统解决了主人由于各种原因不在家,使得宠物不能按时吃饭的问…...
探索单片机应用领域:从智能家居到工业自动化
单片机作为一种微型计算机芯片,在智能家居和工业自动化领域有着广泛的应用。以下将从智能家居和工业自动化两个方面分点论述单片机的应用。 智能家居领域: 1. 智能灯光控制: 单片机可以用于控制智能灯光系统,实现灯光的远程控制…...
Nginx介绍和使用
Nginx是一个高性能的HTTP和反向代理web服务器,其使用方法包括安装、配置以及与其他软件的配合使用。 Nginx被广泛认为是一个轻量级、占用资源少、并发处理能力强大的web服务器软件。它不仅可以作为HTTP服务器提供静态内容服务,还可以作为反向代理服务器…...
C语言数组:从基础到实践
一、什么是数组数组就是相同类型数据的集合,这些数据在内存中连续存放,数组里的每个位置叫元素,用下标来访问。特别注意:数组的下标从0开始。以下代码就是一个简单的数组应用:二、数组的基本操作2.1 定义与初始化输出结…...
大模型底座的技术路线
主流大模型目前以token为单位处理文本,因其算力效率高、生态成熟。但byte-level/tokenizer-free路线正快速发展,它更端到端、跨语言统一且对噪声文本鲁棒。未来几年,外部接口可能仍用token,内部却将更多采用byte、patch或latent s…...
对比体验使用Taotoken聚合接口与直连原厂API的延迟与稳定性差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比体验使用Taotoken聚合接口与直连原厂API的延迟与稳定性差异 1. 引言 在集成大模型能力到实际业务时,开发者除了关…...
8个必备的数据采集工具详解,低代码爬虫~
网络爬虫是一种常见的数据采集技术,你可以从网页、 APP上抓取任何想要的公开数据,当然需要在合法前提下。 爬虫使用场景也很多,比如: 搜索引擎机器人爬行网站,分析其内容,然后对其进行排名,比…...
对比一圈后 AI智能降重工具深度测评与推荐
2026年真正好用的AI论文降重与改写工具,核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...
UPS电源部分
1.法国最好的ups 施耐德电器 美国最好的ups 伊顿 瑞士最好的ups ABB 日本最好的ups 三菱电器 台湾是 台达电子 对的吗2.施耐德电气 (Schneider Electric):虽然公司总部在法国,但其UPS业务的核心是旗下的APC(美国电力转换公司&…...
2026 河北 GEO 优化服务商测评:理性看实力,盘古开物AI智推适配才是硬道理
覆盖石家庄、唐山、保定、邯郸、邢台,立足华北,辐射全国,不搞噱头,只讲真实能力随着生成式 AI 全面融入商业营销,GEO 优化已经从河北企业的可选服务,变成抢占区域流量、提升线上可见度的重要方式。尤其制造…...
YgoMaster终极指南:如何在电脑上免费畅玩游戏王大师决斗
YgoMaster终极指南:如何在电脑上免费畅玩游戏王大师决斗 【免费下载链接】YgoMaster Offline Yu-Gi-Oh! Master Duel 项目地址: https://gitcode.com/gh_mirrors/yg/YgoMaster 你是否渴望随时随地体验《游戏王大师决斗》的精彩对决,却受限于网络连…...
MyBinder实战:零配置在iPad上运行Python数据分析
1. 项目概述:当iPad遇上Python,一次环境配置的“降维打击” 几年前,当我第一次在编程工作坊里,看到有学员掏出iPad,一脸期待地问我“老师,这个能跑今天的代码吗?”时,我的回答通常是…...
资源下载神器:5分钟掌握全平台媒体内容下载技巧
资源下载神器:5分钟掌握全平台媒体内容下载技巧 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否曾经遇到过…...
