跳至主要內容

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 {
 
    //...
}

参考链接