Java 17 新特性 (LTS)
官方发布介绍页面:https://openjdk.org/projects/jdk/17/
1. 密封类
Sealed Classes 允许类或接口限制哪些其他类或接口可以扩展或实现它们。
public abstract sealed class Shape permits Circle, Square {}
public final class Circle extends Shape {
// Implementation
}
public final class Square extends Shape {
// Implementation
}
2. switch 支持模式匹配 (第一次预览)
Pattern Matching for switch 允许在 switch 语句中使用模式匹配。
static String formatterPatternSwitch(Object obj) {
return switch (obj) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> obj.toString();
};
}
3. 强封装 JDK 内部元素
JDK 内部元素现在被强封装,无法通过反射访问。
4. 新增上下文特定的反序列化过滤器
引入了上下文特定的反序列化过滤器,增强了反序列化的安全性。
import java.io.*;
import java.util.*;
public class DeserializationFilterExample {
public static void main(String[] args) throws IOException, ClassNotFoundException {
byte[] data = ...; // serialized data
ObjectInputFilter filter = ObjectInputFilter.Config.createFilter("maxdepth=3;java.base/*;!*");
try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data))) {
ois.setObjectInputFilter(filter);
Object obj = ois.readObject();
}
}
}
5. 新的 macOS 渲染管道
引入了新的 macOS 渲染管道,基于 Apple Metal API。
// 使用命令行参数来启用新的 macOS 渲染管道
// -Dsun.java2d.metal=true
6. 弃用 Applet API 以进行删除
Applet API 被标记为即将移除。
7. 新的随机数生成器
引入了新的随机数生成器接口和实现。
import java.util.random.*;
public class RandomExample {
public static void main(String[] args) {
RandomGenerator generator = RandomGeneratorFactory.of("L128X256MixRandom").create();
System.out.println(generator.nextInt());
}
}
8. 增强的伪随机数生成器
增强了伪随机数生成器,提供了更多的算法和流接口。
import java.util.random.*;
public class EnhancedRandomExample {
public static void main(String[] args) {
RandomGenerator generator = RandomGeneratorFactory.of("L64X128MixRandom").create();
generator.ints(10).forEach(System.out::println);
}
}
9. 删除实验性 AOT 和 JIT 编译器
移除了实验性的 AOT 和 JIT 编译器。