泛型

【泛型】Java中的泛型,泛型类,泛型接口,泛型方法,泛型擦除 这篇文章总结一下Java中的泛型相关知识点,包括:泛型概念、泛型优缺点、泛型通配符、泛型上下界、泛型使用(泛型类、泛型接口、泛型方法)、泛型擦除等内容。 一、泛型概念 (1)什么是泛型 什么是泛型??? 泛型(Generic),是一种参数化数据类型,它允许我们在编写程序代码的时候不用具体指定需要什么数据类型,而是等到具体使用的时候,将数据类型以参数的形式传递给程序,这就是泛型程序设计。 (2)为什么需要泛型 我们来看看下面这个栗子 假设现在有个需求,通过集合保存元素,需要保存String字 阅读详情
这是《Java8编程参考官方教程》第14章的笔记。

泛型(Generic):参数化类型。使用泛型的类、接口、方法,可以作为参数指定所操作数据的类型。
使用泛型,所有的类型转换都是自动和隐式进行的。
通过操作Object类型的引用,Java可以创建一般化的类、接口以及方法。Object是所有类的超类。
起始自JDK 5。

当声明泛型类的实例时,传递过来的类型参数必须是引用类型,不能使用基本类型。
使用泛型相较于直接简单地将Object作为数据类型、作为参数的优势:能够在编译时捕获类型不匹配错误,本质上,也就是可以将运行时错误转换成编译时错误。类型安全,这是泛型的主要优势。

有界类型(bounded type):控制类型参数的类型范围。实现强制类型安全。
<T extends superclass>;
<T extends interface>;
<T extends interface & interface &...>;
<T extends MyClass & MyInterface>;     此时,所有传递给T的类型参数都必须是MyClass的子类,并且必须实现MyInterface接口。

p.s.这里的 T 只是一个占位符。

通配符参数:“?”,表示未知类型。
有界通配符:<? extends superclass>,这是一条包含语句,意思是superclass也位于边界之内。
<? super superclass>

泛型方法:可以在非泛型类中创建泛型方法。
<type-param-list > return-type method-name (param-list) { //...
类型参数在方法的返回类型之前声明。
还可以声明泛型构造方法。

泛型接口:
  1. 如果实现泛型接口的类没有声明类型参数,编译器会报告错误;
  2. 如果类实现了某种具体类型的泛型接口,那么实现类不需要是泛型化的。
interface interface-name<type-param-list> { //...
class class-name<type-param=list> implements interface-name<type-arg-list> { //...

原始类型(raw type)与遗留代码:为了处理泛型过渡,Java允许使用泛型类而不提供任何类型参数。

泛型类层次:当一个泛型类继承另一个泛型类时,它的类型参数必须与超类的类型参数类似,不过子类可以自由添加自己的类型参数。
泛型类可以继承一个非泛型类作为自己的超类。
请记住:在运行时不能使用泛型类型信息。所以:类似instanceof(Gen<Interger>)不能通过编译,要写成instanceof(Gen<?>)。
只有当两个泛型类实例的类型相互兼容并且他们的类型参数也相同时,才能将其中的一个实例强制转换为另一个实例。
重写泛型类的方法:与非泛型类相似。

泛型的类型推断:从JDK 7开始,e.g.
MyClass<integer, String> mcOb = new MyClass<Integer, String>(98, "A String"); 可以写成MyClass<integer, String> mcOb = new MyClass<>(98, "A String");     Java会自己推断构造函数所需要的类型参数。在向方法传递参数时也可以这样用。
这样做是为了缩短有时相当长的声明语句。

擦除:编译Java代码时,所有泛型信息被移除(擦除)。
使用这种方式实现泛型,
  1. 可以不修改JVM而向前兼容;
  2. 意味着在运行时没有类型参数,它们只是一种源代码机制。
桥接方法(bridge method):发生在字节码级别,看不到,不能用。

模糊性错误:e.g.     MyClass<T, V>意思是T、V是两个不同类型的参数,但是如果在实例化的时候写成了两个相同类型的参数,就可能会发生模糊性错误,e.g.     set(T o)和set(V o)变成了两个相同的方法。
应该使用两个独立的方法名,或别的做法来避免这种错误。
一般来说,模糊性通常意味着在设计中存在概念性错误。

使用泛型的一些限制:
  1. 不能实例化类型参数的实例。T 只是一个占位符。
  2. 静态成员不能使用在类中声明的类型参数,但是可以声明静态的泛型方法。
  3. 不能实例化元素类型为类型参数的数组;不能创建特定类型的泛型引用数组,如果要用,使用通配符 ? 。
  4. 泛型类不能扩展Throwable,这意味着不能创建泛型异常类。
网络设备调试指南:如何用MDIO Clause22/45协议读写Marvell MV88E6390寄存器 本文深入解析了如何通过MDIO Clause 22/45协议对Marvell MV88E6390交换芯片进行寄存器读写调试。文章详细对比了两种协议的本质区别与适用场景,并重点阐述了MV88E6390的直接与间接寻址策略,提供了实战代码示例与关键调试技巧,帮助网络工程师高效解决配置与通信问题。 阅读详情

相关推荐

SPSS_Process—简单&平行&链式中介模型

本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。

m0_54401011的博客 4万+

【Java开发语言 08】第八章 泛型(为什么使用泛型+泛型的使用+泛型类+泛型接口,(未)传入泛型实参+泛型方法+通配符+泛型通配符+有限制的通配符)

【Java开发语言 08】第八章 泛型(为什么使用泛型+泛型的使用+泛型类+泛型接口,(未)传入泛型实参+泛型方法+通配符+泛型通配符+有限制的通配符)

一个脱发少女的日常 657

2026款拯救者Y9000P深度学习环境配置指南

这套环境适配 2026 款拯救者 Y9000P 的 RTX5060,可直接用于 CV(图像分类、检测)、NLP 等 PyTorch 深度学习任务,GPU 利用率正常,无兼容性问题。后续复现环境时,直接按本文步骤操作即可~

大糊涂虫 2639

Java、泛型方法(Java8版本)

本程序包含泛型的求最大值方法、返回重复数组列表方法、二分查找法。 泛型--返回最大值: //泛型--返回最大值 /* 对象A.compareTo(对象B)返回值: 如果A<B,值小于0;如果A=B,值等于0;如果A>B,值大于0 */ public static <E extends Comparable<E>> E max(E[][] list) { E max = list[0][0]; //设二维数组的第一个值为最大值 int

m0_62659797的博客 534

从EXIF到测绘:解码大疆影像元数据的实战应用指南

本文深入解析了大疆无人机影像元数据的实战价值,重点阐述了如何利用EXIF和XMP中的GPS、RTK、姿态角及相机内参等关键信息,提升测绘、三维重建及精准农业等项目的成果精度与效率。通过自动化质检脚本与行业应用场景剖析,指导从业者将元数据从信息转化为生产力,实现从拍照到专业测绘的跨越。

dell8的博客 527

SAP软件外币评估系统配置与操作

文章摘要:本文详细介绍了SAP系统中外币评估的流程、策略及系统操作。外币评估是期末关账的重要环节,主要针对外币未清项目及资产/负债进行汇率重估,生成评估差异过账以反映真实财务状况。文中阐述了三种评估策略(不评估、增量评估、期末评估冲回)及适用场景,并提供了SAP系统外币评估的具体操作步骤(FAGL_FCV/FAGL_FC_VAL事务码)。同时,讲解了货币资金科目和未清项管理科目的评估差异处理方式,以及相关的系统配置(OB59、OBA1等)。文章还区分了已实现和未实现汇兑损益的会计处理,为企业外币业务管理提供

weixin_40672823的博客 1963

GUI基础,泛型,集合

1.GUI基础: 一.Label: Label (position : Rect, text : string) : void Label (position : Rect, image : Texture) : void Label (position : Rect, content : GUIContent) : void Label (p

224

镜像电流源与比例电流源:原理、应用与性能优化

本文深入解析了镜像电流源与比例电流源的工作原理、核心应用与性能优化方法。镜像电流源利用匹配晶体管实现电流复制,是集成电路的基础;比例电流源通过发射极电阻实现电流缩放,应用更灵活。文章重点探讨了其作为有源负载提升放大器增益的关键应用,并分析了静态误差、输出阻抗和最小工作电压三大性能指标,最后介绍了威尔逊电流镜等进阶优化技术及实战设计要点。

dd012的博客 567

JDK8新特性

JDK8是Java升级变化最大的一个版本,JDK8引入很多新的写法,比如函数式接口、Lambda表达式、Stream函数式操作流元素集合、接口的默认方法、接口的静态方法等。JDK8是Java升级变化最大的一个版本,JDK8引入很多新的写法,比如函数式接口、Lambda表达式、Stream函数式操作流元素集合、接口的默认方法、接口的静态方法等。

A类功率放大器

在A类放大器中,导通角是完整的360°或100%的输入信号,而在其他类别的放大器中,晶体管在一个较小的导通角内导通。通过在输出级使用两个互补的晶体管,其中一个晶体管是NPN或N通道类型,而另一个晶体管是PNP或P通道(互补)类型,以所谓的 "推挽 "配置连接,可以获得比A类放大器更大的功率输出和效率。这种类型的电路效率很低(低于30%),而且对直流电源的消耗很大,输出的功率却很小。由于我们感兴趣的是向负载提供最大的交流功率,同时从电源中消耗尽可能少的直流电,所以我们主要关注的是放大器的 "转换效率"。

LSW20072007的博客 2469

【WRF后处理】基于wrf-python处理wrf运行结果wrfout_d01

基于wrf-python处理wrf运行结果wrfout_d01

WW、forever的博客 5209

C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托

泛型集合和ArrayList的装箱拆箱、常见的泛型类型、泛型类和泛型方法、泛型约束、 泛型委托泛型很难理解?不然在接触的一个新的概念的时候,总会感觉难以理解,当你掌握并能熟练地使用的时候,发现这个概念其实简单的,我相信大多数码农都会有这种似曾相识的感觉。可能大多数人刚学习泛型的时候觉得很难理解,当然我也是这样的,所以便写下这篇文章加深一下对泛型的印象。

dotNet全栈开发 4万+

【异常】OpenClaw 项目 `fetch failed` 报错问题排查与解决方案Response interrupted: TypeError: fetch failed

针对无超时控制、异常兜底缺失导致的请求中断,封装标准化的安全请求工具,一次性解决超时控制、异常捕获、日志埋点三大问题,全项目替换原生。:将项目运行的 Node.js 版本升级至 18.x 及以上 LTS 版本,使用 Node.js 内置的稳定版。实现的网络请求环节,包括但不限于:第三方开放接口调用、内部服务接口通信、跨域资源请求、外部配置拉取等场景。:针对无法升级 Node.js 版本的存量环境,通过社区稳定兼容包替换原生。类型异常,直接造成业务请求响应中断。第二步:业务代码改造,替换原生。

奶爸的编程之路,也就一周冷个三天 367

一篇带你玩转泛型,泛型详解,什么是泛型,泛型缓存,协变与逆变,泛型方法,为什么使用泛型,泛型接口,ASP.Net泛型,泛型Generic

泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能。我们在编写代码时,经常会遇到功能非常相似的模块,只是他们处理的数据不一样(参数类),有没有一种方法用同一个方法来处理传入不同类型的参数呢?泛型就可以解决这个问题。List 就是泛型,带有""括号的都是泛型,List是一个集合,也有可能是一组 泛型集合。泛型的用处是用一个东西来满足不同类型的需求。泛型命名空间。

Sx_Oracle的博客 2349

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java泛型详解:Java泛型集合、泛型类、泛型方法、泛型的使用

在 Java 1.5 之前没有泛型,通常需要使用强制类型转换的方式将一种数据类型转换为另一种数据类型,这种转换要求开发者对实际参数的类型具有可预知性。对于强制类型转换错误的情况,编译器可能不会提示错误,但是在运行时会出现异常,这是一个安全隐患。 为了解决这一隐患,从 Java 1.5 开始提供了泛型。泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。本节将详...

jijiangpeng的博客 7446

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c#泛型使用详解:泛型特点、泛型继承、泛型接口、泛型委托

泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。在.NET类库中处处都可以看到泛型的身影,尤其是数组和集合中,泛型的存在也大大提高了程序员的开发效率。更重要的是,C#的泛型比C++的模板使用更加安全,并且通过避免装箱和拆箱操作来达到性能提升的目的。因此,我们很有必要掌握并善用这个强大的语言特性。 C#泛型特点: 1、如果实例

zdhlwt2008的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

c#: 泛型接口、泛型方法

泛型可以自定义泛型接口、泛型类、泛型方法、泛型事件、泛型委托。 1>自定义泛型接口 和普通接口一样,一个泛型接口通常也是与某些对象相关的约定规程。泛型接口的声明如下: interface  [接口名] { [接口体] } 在c#中,通过尖括号“。一般来说,声明泛型接口与声明非泛型接口遵循相同的规则。 泛型接口定义完成之后,就要定义此接口的子类。定义泛型接口的子类有以下两种方法。

匆匆那年 1万+

Java泛型的其他应用——泛型接口、泛型方法、泛型数组以及泛型的嵌套设置

学习目标 掌握泛型接口的使用 掌握泛型方法的定义的及使用 掌握泛型数组的使用 掌握泛型的嵌套设置 之前所有的操作都是在类中直接使用泛型操作的,那么,对于Java来说,也可以直接在接口中定义及使用泛型。 定义泛型接口 在JDK1.5之后,不仅仅可以声明泛型类,也可以声明泛型接口,声明泛型接口和声明泛型类的语法类似,也是在接口名称后面加上,如下格式所示: [访问权限]

1万+

Java泛型——为何要有泛型

对于String类类型来说,它是继承自Object的,而Integer的直接父类是Number,因此会有Integer无法转String的错误。泛型类是在实例化类的时候指明泛型的具体类型,那么泛型方法就是在调用方法时指明泛型的具体类型。在实现传入泛型实参的泛型接口的实现类定义中,实现类即使不声明泛型,也不会编译错误。在实现未传入泛型实参的泛型接口的实现类定义中,实现类要声明泛型,否则会编译错误。为了避免这样可能的错误,引入泛型,使编译器在编译阶段就提示不匹配的类类型。方法返回了一个更加特定的返回类型。

xiaovie的博客 1734

java 泛型详解(普通泛型、 通配符、 泛型接口,泛型数组,泛型方法

Java代码Java代码Java代码Java代码Java代码Java代码Java代码。

2401_84619530的博客 1542

Java之泛型,什么是泛型?为什么用泛型?(泛型详解)

1.为什么会有泛型呢? 早期的Object类型可以接受任意的对象类型,但是在实际使用中,会有类型转化的问题,存在隐患,所以Java提供泛型解决这个安全问题 2.什么是泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类...

围巢 4001

java泛型——泛型类、泛型方法、泛型接口

泛型Java 泛型Java 泛型是什么泛型类泛型类的格式泛型类举例泛型方法泛型方法的格式泛型方法举例泛型接口泛型接口的格式泛型接口举例 Java 泛型 Java 泛型是什么 官方定义: 泛型是Java SE 1.5的新特性,泛型的本质就是参数化类型,也就是说所操作的数据类型被指定为一个参数 这种参数类型可以用在类、接口和方法的创建中,分别成为泛型类、泛型接口、泛型方法 优缺点: ​ 优点:可以不用再类型转换了 ​ 缺点:降低了代码的可读性 泛型类 泛型类:当一个类要操作的引用数据类型不确定的时候,可

一个小小的码农 6600

泛型、泛型擦除、泛型通配符

1、泛型定义        将对象的类型作为参数,指定到其他类或方法上,从而保证类型转换的安全性和稳定性,这就是泛型。泛型的本质是参数化类型,也就是把所操作的数据类型指定一个参数,使代码可以用于多种类型。        泛型是JDK1.5的新特性,Java语言...

xingze的博客 1845

C#入门级——泛型、泛型类、泛型接口、泛型方法和泛型委托

C#入门级——泛型、泛型类、泛型接口、泛型方法和泛型委托

dlwlrma_516的博客 5053

Java泛型——类泛型、接口泛型、方法泛型的实现及泛型限定与类型变化关系

自定义泛型类、泛型方法、泛型接口 对泛型的限定、以及数据类型的变化:协变、逆变、双变、不变

任天柳 5200

Java泛型(泛型类、泛型方法、泛型接口)

目录标题泛型引入1. 泛型类特点2. 最简单泛型类3. 泛型方法4. 泛型接口5. 泛型类可是同时设置多个类型参数6. 泛型的类型参数可以是泛型类7. 泛型类可以继承泛型类8. 泛型类可以实现泛型接口 泛型引入 如果我们需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员变量的类型不同,那我们如何去做? 此时,我们就引入了泛型。 泛型:让数据类型变得参数化。定义泛型时,对应的数据类型是不确定的。泛型方法被调用时,才指定具体类型 这样就解决了多个相似的类(方法、接口 )创建的问题,一个泛型类即可代替所

one goto one 的博客 4454
上一篇: 整数划分
下一篇: lambda表达式
寂寞灵魂
博客等级 码龄15年 111粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值