Oracle最新的Java语言发展规划预计将在记录类型、类、原语类型和数组方面带来重大改进。作为这些计划的一部分,目前尚未标记为未来版本的待定功能正在考虑正式纳入Java语言。
在3月17日于加利福尼亚州红木城举行的JavaOne大会上,Oracle Java平台组高级开发人员Dan Smith在演讲中提到了计划包含的功能,但同时表示这些功能可能会发生变化或被取消。新的Java语言功能包括保持Java的特色并最小化干扰,使不可变数据更容易处理,更加声明式而非命令式,以及最小化不同功能之间的缝隙。降低Java的"激活能量"也被列为主题之一。
正在考虑的功能中包括值类和对象,这是一个Java增强提案(JEP),要求通过值对象增强Java平台:只有最终字段且缺乏对象身份的类实例。该提案创建于2020年8月并于本月更新,旨在允许开发人员选择加入域值编程模型,其中对象仅通过其字段的值来区分,就像int值3与int值4的区分一样。该提案的其他目标包括支持现有表示域值的类向此编程模型的兼容迁移,以及最大化JVM存储域值的自由度,以改善内存占用、局部性和垃圾收集效率。
同时,正在预览中的衍生记录创建JEP将提供一种简洁的方法来从现有记录值创建新的记录值。该提案还旨在通过消除提供显式wither方法的需求来简化记录类的声明,wither方法是setter方法的不可变类似物。记录是不可变对象,开发人员经常从旧记录创建新记录来建模新数据。根据该提案,衍生创建通过从现有记录派生新记录来简化代码,只需指定不同的组件。该提案创建于2023年11月,标记为2024年4月更新。
Smith还提到了增强原语装箱JEP(预览功能)和模式、instanceof和switch中的原语类型JEP(实际上正在JDK 26中进行第四次预览的功能)。增强原语装箱创建于2021年1月,标记为2025年11月更新,使用装箱来支持将原语类型更像引用类型处理的语言增强。目标之一是允许原语值作为字段访问、方法调用或方法引用的"接收者"时进行装箱。该JEP的议程还包括支持原语类型作为类型参数,通过在泛型代码边界处装箱来实现。重写具有引用类型返回的方法时将允许未装箱的返回类型。与此同时,原语类型功能要求通过允许在所有模式上下文中使用原语类型并扩展instanceof和switch以与所有原语类型一起工作来增强模式匹配。该功能创建于2025年6月,最后更新于2025年12月。
对于数组,正在考虑的计划涉及声明式数组创建表达式、final数组、非null数组和协变原语数组。声明式数组创建涵盖了包括使用lambda计算初始值在内的功能。对于final数组,组件无法变更且必须声明式初始化。协变原语数组可以将int[]视为非null Integer[]。可以根据需要访问装箱。
Q&A
Q1:Java值类和对象功能的主要特点是什么?
A:值类和对象是Java增强提案的一部分,它提供只有final字段且缺乏对象身份的类实例。对象仅通过字段值来区分,类似int值的区分方式,旨在改善内存占用、局部性和垃圾收集效率。
Q2:衍生记录创建功能如何简化Java开发?
A:衍生记录创建提供了从现有记录值创建新记录值的简洁方法,开发人员只需指定不同的组件即可,无需提供显式wither方法,从而简化记录类的声明和代码编写。
Q3:增强原语装箱功能有什么实用价值?
A:增强原语装箱让原语类型更像引用类型,支持原语值作为字段访问和方法调用的接收者时进行装箱,支持原语类型作为泛型参数,并允许重写方法时使用未装箱的返回类型。