JDK 22 两分钟速览! - Sip of Java
Billy Korando 于 2024 年 3 月 21 日在本文中,我们将简要了解 JDK22 中包含的 JEP(JDK 增强提案)!
最终功能 JEP
四个 JEP 包含最终功能。
JEP 423 为 G1 添加了区域固定。这允许 G1 仍然对包含由 JNI(Java 本地接口)使用的对象的区域执行垃圾回收,方法是将这些对象固定在该区域中。
JEP 454 完成了外部函数和内存 API(FFM API)。FFM API 是对 JNI 的改进,通过在使用本机库时增强开发人员的生产力和体验、性能、安全性以及一致性。
JEP 456 完成了未命名变量和模式。此 JEP 允许您不打算使用的变量和模式变量被替换为下划线。这不仅减少了代码冗长,而且还改进了代码的意图。
sealed abstract class Ball
permits RedBall, BlueBall, GreenBall { }
final class RedBall extends Ball { }
final class BlueBall extends Ball { }
final class GreenBall extends Ball { }
Ball ball = ...
switch (ball) {
case RedBall _ -> process(ball);
case BlueBall _ -> process(ball);
case GreenBall _ -> stopProcessing();
}
JEP 458,启动多文件源代码程序,顾名思义,允许 Java 启动器编译和启动多个源代码文件,这是对 JEP 330 启动单文件源代码程序的改进。
// file MainApplication.java
public class MainApplication {
public static void main(String[] args) {
Person p = new Person("Billy", "Korando");
System.out.println("Hello, " + p.toString() + "!");
}
}
// file Person.java
record Person(String fName, String lName) {
public String toString(){
return fName + " " + lName;
}
}
$ java MainApplication.java
Hello Billy Korando!
预览功能 JEP
JEP 447 允许在构造函数中调用 super 之前添加语句。这允许开发人员在调用父构造函数之前添加验证或其他要执行的处理。就像这个代码示例一样
public class PositiveBigInteger extends BigInteger {
public PositiveBigInteger(long value) {
if (value <= 0)
throw new IllegalArgumentException("non-positive value");
super(value);
}
}
JEP 457 为类文件提供标准 API。大多数开发人员不太可能直接与之交互,但这将改善在 JDK 版本之间升级的体验。
JEP 461 引入了流收集器。流收集器是一种中间操作,可以应用于流以转换流中的元素。
JEP 463 隐式声明的类和实例主方法是 JEP 445 的第二个预览,未命名类和实例主方法。它包括对源文件中隐式声明类的规则更改以及选择要调用的主方法的程序。
void main(){
System.out.println("Hello World!");
}
JEP 459、462 和 464,分别为字符串模板、结构化并发和作用域值,在 JEP 中进入第二个预览,所有 JEP 都包含较小的或没有 API 更改。但是,Brian Goetz 最近宣布了对字符串模板的重大修订。请务必在 inside.java 和 Java YouTube 频道 上查看更新!
孵化器功能 JEP
JEP 460,向量 API,是唯一一个处于孵化器状态第七次迭代的孵化器功能。
向量 API 将继续保持孵化器状态,直到 Valhalla 项目功能发布。
其他阅读材料
JDK 22 项目页面 - https://openjdk.org/projects/jdk/22/
字符串模板更新(JEP 459) - https://mail.openjdk.org/pipermail/amber-spec-experts/2024-March/004010.html
祝您编码愉快!