JDK15新特性
大约 2 分钟后端JDK新特性
[TOC]
record类
record用于声明不可变数据类,没有record之前通常用final进行修饰表示数据不可变,代码如下:
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
使用record后
public record Person(String name, int age) {
}
隐藏类
隐藏类的目标是允许在运行时创建不可发现的类。这意味着它们不能被其他类链接,也不能通过反射发现它们。此类类的生命周期通常较短,因此,隐藏类的设计在加载和卸载方面都非常高效。
注意
当前版本的Java确实允许创建类似于隐藏类的匿名类。然而,它们依赖于不安全API。隐藏类没有这样的依赖。
匹配类型检查
对对象类型检查做了优化,目标是简化代码。之前代码如下:
if (person instanceof Employee) {
Employee employee = (Employee) person;
Date hireDate = employee.getHireDate();
//...
}
新的写法如下:
if (person instanceof Employee employee) {
Date hireDate = employee.getHireDate();
//...
}
外部内存访问加强
外部内存访问已经是Java 14的一个特性。在Java 15中,目标是继续其孵化状态,同时添加几个新特性
- 一个新的VarHandle API,用于自定义内存访问变量句柄
- 支持使用Spliterator接口并行处理内存段
- 增强了对映射内存段的支持
- 能够操作来自本机调用之类的地址
垃圾收集器
ZGC和Shenandoah不再是实验特性,可以在生产环境进行使用。
封闭类
Java没有提供对继承的细粒度控制。访问修饰符,如public、protected、private以及默认包-private,提供非常粗粒度的控制。为此,封闭类的目标是声明哪些子类可以继承。示例如下:
public abstract sealed class Person
permits Employee, Manager {
//...
}