网易首页 > 网易号 > 正文 申请入驻

JEP 447 已发布,可在构造函数的 super()调用之前执行语句

0
分享至

作者 | A N M Bazlur Rahman

译者 | 明知山

策划 | 丁晓昀

在评审结束后,JEP 447(super() 前置语句 (预览)) 已在 JDK 22 中交付。该 JEP 来自 Project Amber 项目,提议允许在构造函数的super()调用之前出现不引用正在创建的实例的语句,并保留构造函数现有的安全性和初始化保证。Oracle 技术顾问成员 Gavin Bierman 为 Java 社区提供了这个 JEP 的初始规范,供社区评审并提供反馈意见。

传统上,要求 Java 构造函数将对另一个构造函数的显式调用作为第一条语句。这个约束确保了自上而下的执行顺序,并防止对未初始化字段的访问,极大地限制了构造函数逻辑的表达性和可读性。考虑下面的例子:


public class PositiveBigInteger extends BigInteger {
public PositiveBigInteger(long value) {super(value); // Potentially unnecessary workif (value <= 0)throw new IllegalArgumentException("non-positive value");

通过在调用超类构造函数之前验证其参数来声明快速失败的构造函数会更好。JEP 447 放宽了这些限制,允许在显式构造函数调用之前出现不引用正在创建的实例的语句。有了这个功能,上面的代码可以简化为:


public class PositiveBigInteger extends BigInteger {
public PositiveBigInteger(long value) {if (value <= 0)throw new IllegalArgumentException("non-positive value");super(value);

考虑另一种情况,比如子类构造函数需要为超类构造函数准备参数。以前,由于超类构造函数调用必须作为第一条语句,这就需要使用辅助方法。


public class SubClass extends SuperClass {public SubClass(Certificate certificate) {super(prepareByteArray(certificate));
private static byte[] prepareByteArray(Certificate certificate) {// Logic to prepare byte array from certificatereturn byteArray;

在这个例子中,prepareByteArray方法在将Certificate对象传递给SuperClass构造函数之前对它进行处理。有了 JEP 447,这个过程变得更加简洁和直观。


public class SubClass extends SuperClass {public SubClass(Certificate certificate) {// Directly include the logic to prepare byte arrayPublicKey publicKey = certificate.getPublicKey();if (publicKey == null) {throw new IllegalArgumentException("Null certificate");byte[] byteArray = switch (publicKey) {case RSAPublicKey rsaKey -> rsaKey.getEncoded();case DSAPublicKey dsaKey -> dsaKey.getEncoded();default -> throw new UnsupportedOperationException("Unsupported key type");super(byteArray);

在这个新的例子中,SubClass的构造函数直接包含处理Certificate对象的逻辑。这种直接的方法增强了可读性,减少对使用辅助方法的需求,展示了 JEP 447 在实际应用场景中的好处。

JEP 447 不仅提供了更大的灵活性,还保留了构造函数行为的基本保证,确保子类构造函数不会干扰超类的实例化。这个更新不需要对 Java 虚拟机(JVM)做任何修改,仅依赖 JVM 现有的能力来验证和执行构造函数调用之前的代码。

随着 Java 的不断发展,JEP 447 清楚地表明了 Java 在不断适应现代编程实践。它反映了在引入新特性和保持 Java 生态系统健壮性之间的平衡。对于 Java 开发者来说,这意味着有机会探索更高效的编码实践,同时仍然保持对编程语言的核心原则。

查看英文原文

https://www.infoq.com/news/2024/01/java-constructors-enhancement/

声明:本文为 InfoQ 翻译,未经许可禁止转载。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
全镇仅1.3万人!德国小镇球队狂飙突进,队史首升德甲

全镇仅1.3万人!德国小镇球队狂飙突进,队史首升德甲

仰卧撑FTUer
2026-05-19 09:27:02
从家庭主妇到业界传奇:白木优子的非凡生涯与优雅谢幕

从家庭主妇到业界传奇:白木优子的非凡生涯与优雅谢幕

吃瓜党二号头目
2026-05-18 08:27:50
那一脚,踹飞9万块还搭上终身禁入,巨婴凭啥让全体国人买单?

那一脚,踹飞9万块还搭上终身禁入,巨婴凭啥让全体国人买单?

糖逗在娱乐
2026-05-19 15:05:35
一个男人在低谷时,拼命社交、到处找机会都是下策,最明智的做法,是狠心在这两件事上做“反人性”的投资

一个男人在低谷时,拼命社交、到处找机会都是下策,最明智的做法,是狠心在这两件事上做“反人性”的投资

心理观察局
2026-05-08 09:00:04
【星耀美加墨】这支竞争力处于历史巅峰的葡萄牙,能否让C罗圆梦呢?

【星耀美加墨】这支竞争力处于历史巅峰的葡萄牙,能否让C罗圆梦呢?

五星体育
2026-05-19 21:45:51
特朗普对台湾问题表态,和拜登截然不同

特朗普对台湾问题表态,和拜登截然不同

远方青木
2026-05-18 23:22:47
难以置信!网传一家长被学校要求签字同意孩子放弃中考,评论炸锅

难以置信!网传一家长被学校要求签字同意孩子放弃中考,评论炸锅

火山詩话
2026-05-19 18:57:15
陕西男子用2条毒蛇泡酒,12年后打开本想品尝美酒,谁知酿成惨剧

陕西男子用2条毒蛇泡酒,12年后打开本想品尝美酒,谁知酿成惨剧

红豆讲堂
2025-03-26 10:05:43
西媒:穆帅这次仍会邀请一名皇马旧将入教练组,最想要劳尔

西媒:穆帅这次仍会邀请一名皇马旧将入教练组,最想要劳尔

懂球帝
2026-05-19 06:32:14
神图 | 知道为什么打不到蚊子了吧!

神图 | 知道为什么打不到蚊子了吧!

科技狐
2026-05-17 22:34:08
定了!广东中小学生2026暑假时间出炉,家长却表示难以接受!

定了!广东中小学生2026暑假时间出炉,家长却表示难以接受!

凯旋学长
2026-05-18 15:46:45
仅用1年,重回英超第三,夺得欧冠名额,这2.5亿欧元花的太值了

仅用1年,重回英超第三,夺得欧冠名额,这2.5亿欧元花的太值了

篮球圈里的那些事
2026-05-18 20:38:33
罢赖结果出炉,多蓝委缺席原因曝光,卢秀燕亮明态度,傅崐萁发声

罢赖结果出炉,多蓝委缺席原因曝光,卢秀燕亮明态度,傅崐萁发声

小陆搞笑日常
2026-05-19 18:08:13
阿森纳切尔西曼联三强争夺希腊飞翼 47球助攻数据引关注

阿森纳切尔西曼联三强争夺希腊飞翼 47球助攻数据引关注

赛场速报局
2026-05-20 00:33:13
5连板+涨停潮!“算电协同”落地,电力板块成最强主线

5连板+涨停潮!“算电协同”落地,电力板块成最强主线

21世纪经济报道
2026-05-19 14:29:29
携巨额遗产逃往英国,给杨振宁戴绿帽子,翁帆流言太过离谱

携巨额遗产逃往英国,给杨振宁戴绿帽子,翁帆流言太过离谱

街上的行人很刺眼
2026-05-18 20:01:05
葡萄牙队官宣“27+1”名单 41岁C罗第6次征战世界杯

葡萄牙队官宣“27+1”名单 41岁C罗第6次征战世界杯

体坛周报
2026-05-19 21:13:40
生意太好被处处刁难,屠夫6天杀13人,公安部A级通缉犯石悦军落网

生意太好被处处刁难,屠夫6天杀13人,公安部A级通缉犯石悦军落网

易玄
2026-05-18 23:06:35
不愧是纽约!东决G1票价最低557美元:已创分区决赛新纪录

不愧是纽约!东决G1票价最低557美元:已创分区决赛新纪录

罗说NBA
2026-05-19 06:39:21
多次公开称赞中国高铁 马斯克再发视频点赞重庆东站

多次公开称赞中国高铁 马斯克再发视频点赞重庆东站

快科技
2026-05-19 09:01:16
2026-05-20 01:31:00
InfoQ incentive-icons
InfoQ
有内容的技术社区媒体
12400文章数 51895关注度
往期回顾 全部

科技要闻

马斯克败诉,法院判他起诉OpenAI太晚了

头条要闻

普京抵达北京脱西装上总统专车 车牌3个8

头条要闻

普京抵达北京脱西装上总统专车 车牌3个8

体育要闻

文班亚马:没拿到MVP,就证明自己是MVP

娱乐要闻

姚晨删博难平众怒,为什么她还能蹦哒

财经要闻

洁丽雅硬刚豪门内斗传言

汽车要闻

焕新极氪009上市41.38万起 齐家版让MPV回归家庭

态度原创

本地
亲子
旅游
健康
公开课

本地新闻

别搜晋江小说了,去看真的晋江

亲子要闻

小汽车吃冰淇淋 #大型挖掘机挖土玩具

旅游要闻

中国旅游日主会场广州启动!广东全力建设旅游友好型城市

专家揭秘干细胞回输的安全风险

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版