Java泛型---桥方法

news/2026/1/18 16:42:42/文章来源:https://www.cnblogs.com/tww103/p/19498707

桥方法

桥方法是为了解决类型擦除后与多态的冲突。为了理解什么是桥方法。下面举实例,假设有一个泛型类Pair,它用来保存两个值,first与second,first永远比second大。
现在,创建一个子类去继承它。

package Test;import java.time.LocalDate;public class Pair<T>
{private T first;private T second;public Pair(){};public Pair(T first, T second) {this.first = first;this.second = second;}public T getFirst() {return first;}public void setFirst(T first) {this.first = first;}public T getSecond() {return second;}public void setSecond(T second) {this.second = second;}}class DateInterval extends Pair<LocalDate> {public void setSecond(LocalDate second){if(second.compareTo(getFirst()) >=0)super.setSecond(second);}
}

那么呢,这个子类重写了父类的setSecond,这是我们的意图,要去重写这个方法,那么注意看子类的方法。由于它继承的是Pair类,所以这个方法的参数也要是LocalData,毕竟要时这个日期保持在第二。现在回到泛型类Pair,它的方法类型擦除后是什么样子

 public void setSecond(Object second){this.second = second;}

很明显,两个方法的参数不一样,并没有达到重写的目的,而是变成了重载。问题就在这里,如果我们编写下面的代码

       DateInterval dateInterval = new DateInterval(); //创建一个实例Pair<LocalDate> pair = dateInterval; //父类引用子类实例pair.setSecond(LocalDate.now());

上面的代码是典型的多态概念的体现,根据对象的实际类型而非声明类型来决定调用哪个方法的过程,所以此时,预期中肯定是调用实例的方法。但此时,多态特性与类型擦除产生了冲突,编译器会生成一个桥方法。如果没有桥方法,那它会调用本身的方法,也就是原始类型的setsecond(Objects second)方法。为了解决这个问题,编译器在DateInterval类中生成一个桥方法

public void setSecond(Object second){setSecond((LocalData) Second);
}

强制调用预期的方法。这就是桥方法,通过搭建一座看不见的桥,使程序符合Java特性。然而,这样看不见的特性,怎么去证明它确实存在?其一是,这样的桥方法是编译器自动生成,如果你手动编写这样的方法,会与编译器生成的产生冲突,从而报错。
image
其二是通过JDK自带查看字节码的工具,对编译后的.class文件执行以下命令。
bash javap -c -v DataInterval.class

欲重写父类的方法字节码

编译器自动生成的setSecond方法,可以很明显的看到它方法的参数是Object。至于其余的代码,我们主要看这一行:
java 5: invokevirtual #25 // Method setSecond:(Ljava/time/LocalDate;)V

类似的,重写父类的get方法

class DateInterval extends Pair<LocalDate>
{//编译器自动生成桥方法public LocalDate getSecond(){//返回父类的second值并转为LocalDate类return (LocalDate) super.getSecond();}}

编译器会生成下面的桥方法

LocalDate getSecond();Object getSecond();//父类继承

总之,对Java泛型的转换,记住以下几点:

  • 虚拟机中没有泛型,只有普通的类和方法。
  • 所有类型参数都会替换为他们的限定类型。
  • 会合成桥方法来保持多态
  • 为保持类型安全性,必要时会强制插入类型转换。

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

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

相关文章

自动化视频制作:深入解析 FFmpeg 图片转视频脚本

在处理大量生成的图片资产&#xff08;如 AI 生成的艺术图&#xff09;时&#xff0c;我们经常需要将它们转化为更易于分享的视频格式。手动操作不仅繁琐&#xff0c;而且难以保证每张图停留时间的精确性。本文将带你深入剖析一个自动化脚本&#xff0c;看看它是如何一键完成“…

C14-2025.1.18

XSS原理 XSS(跨站脚本攻击)漏洞是一种常见的安全漏洞,其原理是攻击者通过向网页中注入恶意脚本代码 (JavaScript代码) ,当其他用户访问该页面时,浏览器会执行这些脚本,从而盗取用户信息(如Cookie)、劫持会话…

AI论文写作效率飙升200%:从零到一9款工具实操指南,彻底告别拖延 - 麟书学长

论文写作新手常遇文档空白、修改难、查重焦虑等问题,本文对比9款AI论文工具核心能力,如一站式的图灵论文AI(30分钟出5万字初稿)、小众高效的AI论文及时雨、全学科覆盖的巨鲸写作等,还详解图灵实操步骤、其他工具指…

2026年国内专业的智能货架定制厂家推荐,钢制货架/悬臂货架/重载货架/不锈钢货架/模具架/货架,智能货架批发厂家选哪家 - 品牌推荐师

行业背景与市场趋势 随着制造业智能化升级加速,仓储物流环节对空间利用率、存取效率及数据追溯能力的要求日益严苛。智能货架作为工业4.0的核心载体,通过集成物联网、机器人及AI算法,实现从“静态存储”到“动态管理…

30、二分类和多分类的区别 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

小程序毕设选题推荐:基于Java的校园导航微信小程序的设计与实现基于springboot+微信小程序的校园导航与信息服务系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

别忽视这个16×16的小图标:Icon背后的产品逻辑,以及一款让开发者省心的制作工具

在互联网产品的世界里&#xff0c;我们常常聚焦于宏大的功能架构、流畅的交互体验、精美的视觉设计&#xff0c;却容易忽略一个看似微不足道的元素——Icon&#xff08;图标&#xff09;。尤其是网页的favicon.ico&#xff0c;那个仅仅占据浏览器标签栏1616像素的小图标&#x…

计算机小程序毕设实战-基于springboot+微信小程序的驾考在线学习与测试系统驾校预约学习系统查看教练信息、教练预约进行考试【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

小程序计算机毕设之基于springboot位置服务的城市路线分享系统小程序(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

小程序毕设项目:基于springboot位置服务的城市路线分享系统小程序(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

计算机小程序毕设实战-基于springboot+微信小程序的校园导航与信息服务系统基于微信小程序的校园信息交流平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【课程设计/毕业设计】基于小程序的位置服务的城市路线分享系统的设计与实现基于springboot位置服务的城市路线分享系统小程序【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

基于AI智能名片链动2+1模式S2B2C商城小程序的流量运营策略研究

摘要&#xff1a;在零售行业竞争日益激烈的背景下&#xff0c;流量获取与转化成为企业发展的关键。本文聚焦AI智能名片链动21模式S2B2C商城小程序这一创新商业模式&#xff0c;深入探讨其在推广产品定位、归集渠道现有流量以及拓展内外部流量方面的作用机制与实践路径。通过理论…

学霸同款2026 AI论文网站TOP8:本科生毕业论文必备测评

学霸同款2026 AI论文网站TOP8&#xff1a;本科生毕业论文必备测评 2026年学术写作工具测评&#xff1a;为何需要一份精准榜单&#xff1f; 随着AI技术在学术领域的深度应用&#xff0c;越来越多的本科生开始依赖智能写作工具辅助论文撰写。然而&#xff0c;面对市场上琳琅满目的…

分期乐购物额度闲置?安全回收指南+可可收实操拆解 - 可可收

当下消费场景中,不少人手中握着分期乐购物额度却闲置不用,想将其回收又苦于找不到安全路径。作为深耕卡券回收领域的从业者,我将站在用户视角,拆解分期乐购物额度回收的安全核心、实操细节,助力大家避开陷阱顺利回…

大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(12)

大学院-筆記試験練習&#xff1a;数据库&#xff08;データベース問題訓練&#xff09; と 软件工程&#xff08;ソフトウェア&#xff09;&#xff08;12&#xff09;1-前言2-数据库データベースデータベース&#xff08;本番レベル問題&#xff09;【問題1】&#xff08;デ…

全球口碑最好的防脱洗发水排名前十,洗发水哪个牌子效果好?青少年安全首选第一名 - 博客万

在秀发稀疏问题日益普遍的时代,挑选一款真正有效的固发洗发产品,已超越单纯关注“防脱”功能,其能否“温和适配各类头皮状况”已成为更深层的考量。油性发质担忧清洁不足,干燥头皮惧怕越洗越脆,而完整的头皮微生态…

微信小程序毕设项目推荐-基于微信小程序的驾考在线学习与测试系统基于springboot+微信小程序的驾考在线学习与测试系统【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】基于springboot位置服务的城市路线分享系统小程序(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java String 字符串终极详解(全特性+全API+全示例)

一、String 基础定义与底层实现 1.1 核心定义 String 是 Java 中用于表示不可变字符序列的引用类型&#xff0c;位于 java.lang 包下。JVM 会自动加载该包&#xff0c;无需手动导入。它并非 8 种基本数据类型&#xff08;byte、short、int、long、float、double、char、boolean…