【java】泛型
文章目录
- 1. 什么是泛型?
- 1.1 背景
- 1.2 泛型的概念
- 1.3 泛型的好处
- 2. 泛型类、接口...
- 2.1 泛型类
- 2.2 从泛型类派生子类
- 2.2.1 子类也是泛型类,子类和父类的泛型类型要一致
- 2.2.2 子类不是泛型类,父类要明确泛型的数据类型
- 2.3 泛型接口
- 2.4 泛型方法
- 2.5 类型通配符
- 2.5.2 类型通配符的上限
- 2.5.3 类型通配符的下限
- 3. 类型擦除
- 3.1 无限制类型擦除
- 3.2 有限制类型擦除
- 3.3 擦除方法中类型定义的参数
- 3.4 桥接方法
- 3.5 泛型与数组
- 3.5.1 泛型数组的创建
- 3.6 泛型和反射
- 3.6.1 反射常用的泛型类
【后端&网络&大数据&数据库目录贴】
参考视频
1. 什么是泛型?
1.1 背景
JAVA推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序员明确知道存储每个元素的数据类型,否则很容易引发ClassCastException异常。
1.2 泛型的概念
Java泛型(generics)是
JDK5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许我们在编译时检测到非法的类型数据结构。
泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数。
1.3 泛型的好处
- 类型安全
- 消除了强制类型的转换
2. 泛型类、接口…
2.1 泛型类
泛型类的定义语法
class 类名称 <泛型标识,泛型标识,…> {private 泛型标识 变量名; .....
}
常用的泛型标识:T、E、K、V
使用语法
类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();
Java1.7以后,后面的<>中的具体的数据类型可以省略不写(
菱形语法)
类名<具体的数据类型> 对象名 = new 类名<>();
泛型类注意事项
- 泛型类,如果没有指定具体的数据类型,此时,操作类型是Object
- 泛型的类型参数只能是
类类型,不能是基本数据类型- 泛型类型在逻辑上可以看成是多个
不同的类型,但实际上都是相同类型
2.2 从泛型类派生子类
2.2.1 子类也是泛型类,子类和父类的泛型类型要一致
class ChildGeneric<T> extends Generic<T>
2.2.2 子类不是泛型类,父类要明确泛型的数据类型
class ChildGeneric extends Generic<String>
2.3 泛型接口
泛型接口的定义语法
interface 接口名称 <泛型标识,泛型标识,…> {泛型标识 方法名(); .....
}
泛型接口的使用
实现类不是泛型类,接口要明确数据类型
实现类也是泛型类,实现类和接口的泛型类型要一致
2.4 泛型方法
泛型类,是在实例化类的时候指明泛型的具体类型。
泛型方法,是在调用方法的时候指明泛型的具体类型。
语法
- public与返回值中间
<T>非常重要,可以理解为声明此方法为泛型方法。- 只有声明了
<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法
3.<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T- 与泛型类的定义一样,此处T可以随便写为任意标识,常见的如
T、E、K、V等形式的参数常用于表示泛型。- 泛型方法的泛型标志
独立于泛型类,(泛型类使用T,泛型方法也可以使用T,不冲突)(泛型方法能使方法独立于类而产生变化)- 如果static方法要使用泛型能力,就必须使其成为泛型方法.(
成员方法使用类的泛型不可以)
修饰符 <T,E, ...> 返回值类型 方法名(形参列表) {方法体...
}
可变参数泛型方法
public <E> void print(E... e){for (E e1 : e) {System.out.println(e);}}
2.5 类型通配符
类型通配符一般是使用
"?"代替具体的类型实参。
所以,类型通配符是类型实参,而不是类型形参。(经过查询资料,并不是实参的说法)
语法
类/接口<?>
2.5.2 类型通配符的上限
语法
类/接口<? extends 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的子类类型。(不能够填充任何类型数据)
2.5.3 类型通配符的下限
语法
类/接口<? super 实参类型>
要求该泛型的类型,只能是实参类型,或实参类型的父类类型。(可以填充任何类型数据)
注意:
//问题1:不能重载,本质依然是同一类型(泛型是同一类型)public void showBox(Box<Number> box) {Number first = box.getFirst();System.out.println(first);}public void showBox(Box<Integer> box) {Number first = box.getFirst();System.out.println(first);}//问题2:这里不能通过多态理解,多态理解不能接收Integerpublic void showBox(Box<Number> box) {Number first = box.getFirst();System.out.println(first);}
3. 类型擦除
泛型是Java 1.5版本才引进的概念,在这之前是没有泛型的,但是,泛型代码能够很好地和之前版本的代码兼容。那是因为,泛型信息只存在于代码编译阶段,在进入JVM之前,与泛型相关的信息会被擦除掉,我们称之为–
类型擦除。
3.1 无限制类型擦除

3.2 有限制类型擦除

3.3 擦除方法中类型定义的参数

3.4 桥接方法

3.5 泛型与数组
3.5.1 泛型数组的创建
- 可以声明带
泛型的数组引用,但是不能直接创建带泛型的数组对象 - 可以通过
java.lang.reflect.Array的newInstance(Class<T>,int)创建T[]数组
3.6 泛型和反射
3.6.1 反射常用的泛型类
Class<T>Constructor<T>
相关文章:
【java】泛型
文章目录 1. 什么是泛型?1.1 背景1.2 泛型的概念1.3 泛型的好处 2. 泛型类、接口...2.1 泛型类2.2 从泛型类派生子类2.2.1 子类也是泛型类,子类和父类的泛型类型要一致2.2.2 子类不是泛型类,父类要明确泛型的数据类型 2.3 泛型接口2.4 泛型方…...
计算思维的理解
2006年,卡内基梅隆大学周以真教授首次系统性地定义了计算思维。这一年,她在美国计算机权威期刊《Communications of the ACM》上发表了题为《Computational Thinking》的论文,由此开启了计算思维大众化的全新历程。 周以真(Jeanne…...
Python中tkinter编程入门4
在Python中tkinter编程入门3-CSDN博客中创建了Button控件,点击该控件就会产生一个点击事件,在创建Button控件时指定该点击事件的处理程序后,按键控件就会对用户的点击事件产生响应。 1 定义事件处理器 定义事件处理器就是一个自定义的函数。…...
Milvus的系统架构
简介 Milvus的构建在许多知名的向量搜索库比如Faiss, HNSW, DiskANN, SCANN等之上的,它针对稠密向量数据集的相似搜索而设计,能支持百万、十亿甚至万亿级别的向量搜索。 Milvus支持数据分片,流式数据插入,动态schema,…...
MFC中关于CMutex类的学习
MFC中关于CMutex类的学习 最近在项目中要实现两个线程之间的同步,MFC中提供了4个类,分别是CMutex(互斥量)、CCriticalSection(临界区)、CEvent(事件对象)、CSemaphore(信号量)。有关这4个类的说明,大家可以参考微软官方文档: CM…...
删除表空间
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 当某个表空间中的数据不再需要时,或者新创建的表空间不符合要求时,可以考虑删除这个表空间。若要删除表空间,则需要用户具有 DROP TABLESP…...
下载element-ui报错
此错误表示尝试从npm注册表下载“resize observer polyfill”包时超时。这可能是由于网络连接问题或npm注册表服务器的问题。 要解决此问题,您可以尝试以下步骤: 1.重试npm install命令:有时,网络问题会导致临时超时。再次运行npm…...
[原创](Modern C++)现代C++的std::bind花式绑定,使用方式大全.
[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…...
Unity射击游戏开发教程:(13)如何在Unity中播放音效
在本文中,我将向大家展示一些为游戏添加声音的不同方法。 我们为游戏添加声音的第一种方法是播放背景音乐。在此,我们将创建游戏对象(“音频管理器”)并创建一个子游戏对象(“背景音乐”)。该子游戏对象将是播放音乐的对象,因此需要向其添加音频源组件。如果没有音频源组…...
Swift—手写防抖、手写图片预加载与多张图片拼接
什么是防抖,为什么要防抖? 比如我们在文档在线编辑中修改文档内容,总不能打一个字就发送一次更新请求吧,用户疯狂点击一个按钮,总不能一直触发按钮的逻辑吧。防抖被用于避免频繁触发的事件。 Swift实现防抖代码&…...
Redis过期键删除策略
Redis有三种过期键的删除策略。 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除策略。惰性删除:放任键过期不管,但每次从键空间获取键时,…...
413 Request Entity Too Large
问题 平台上传文件接口报:413 Request Entity Too Large。 原因 从字面意思就能看出来,是上传文件过大导致的。 一般解决 一般情况下修改nginx配置文件中client_max_body_size参数的大小就行了。可以在http{ }中设置。也可以在server{ }中设置。还可…...
工业无风扇计算机的优点
无风扇计算机往往采用紧凑且密封的外形,使其坚固耐用,使其能够在需要现场工程师进行维护之前承受恶劣的环境数年。机载移动部件较少或没有移动部件会降低组件无法按预期运行的可能性,或者更糟糕的是发生故障和损坏。采用工业组件和较低的散热…...
个人学习计划
vue前端(一周) 05/14 - 05/19 Html、css复习、vue基础复习、axios复习 05/14 ElementUI学习 05/15 JWT集成验证码、token 05/16 vue-route多角色登录 05/17 增删查改、文件下载 05/18 Echart饼状图 05/19 📌 附加学习: 父子传值三…...
【电控实物-LK电机】
参数 Kt 0.11 N.M/A...
《Mybatis》系列文章目录
什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJOÿ…...
ARM机密计算组件
安全之安全(security)博客目录导读 目录 一、硬件架构 1、RME 二、软件和固件架构 1、RMM 2、其他固件标准(例如PSCI) 三、开源实现 1、TF-A 2、Veraison 3、工具链 四、动态TrustZone技术 Arm机密计算架构(Arm CCA)引入了一系列硬件和软件…...
Linux 生态与工具
各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 目录 Linux生态简介:Linux工具lrzszÿ…...
RHCE网络服务配置之循环执行的例行性工作
1、什么是循环执行的例行性工作 循环执行的例行性工作:每隔一定的周期就需要执行一次 2、crontab的工作过程 /etc/cron.allow,写在该文件的人可以使用crontab命令 /etc/cron.deny,黑名单 两个文件如果都不存在,只有root能使用…...
vue3使用el-radio-group获取表格数据无法选中问题
这里是引用 今天写项目发现使用el-radio-group无法获取表格中的数据,于是去官网查看了一下,发现写的没啥问题,就是 <el-radio value"1" size"large"> 未知</el-radio>这样的写法,又在网上看了一些…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
