Java 16 新特性

Java 16 新特性

Java 16 在 2021 年 3 月 16 日正式发布,在语法上的新特性更新比较多,主要是一些之前版本引入的预览特性正式发布。比如Java14中的打包工具、instanceof、Record类

Java 16 全部的新特性,请看官网:JDK 16 发行说明

Java各个版本的文档入口:Java平台,标准版文档

Java各个版本下载:https://jdk.java.net/archive/

1、instanceof 模式匹配

改进 instanceof 在 Java 14 中已经提出,在 Java 15 中继续预览,而现在,在 Java 16 中成为正式功能。

在之前,使用 instanceof 需要如下操作:

if (obj instanceof String) {
    
    
    String s = (String) obj;    // grr...
    ...
}

多余的类型强制转换,而现在:

if (obj instanceof String s) {
    
    
    // Let pattern matching do the work!
    ...
}

扩展阅读:Java 14 新特性介绍 - instanceof

2、Records

Record 成为 Java 16 的正式功能,下面是介绍 Java 14 时关于 Record 的介绍。

record 是一种全新的类型,它本质上是一个 final 类,同时所有的属性都是 final 修饰,它会自动编译出 public get hashcodeequalstoString 等方法,减少了代码编写量。

示例:编写一个 Dog record 类,定义 name 和 age 属性。

package com.wlw;

public record Dog(String name, Integer age) {
    
    
}

Record 的使用。

package com.wdbyte;

public class Java14Record {
    
    

    public static void main(String[] args) {
    
    
        Dog dog1 = new Dog("牧羊犬", 1);
        Dog dog2 = new Dog("田园犬", 2);
        Dog dog3 = new Dog("哈士奇", 3);
        System.out.println(dog1);
        System.out.println(dog2);
        System.out.println(dog3);
    }
}

输出结果:

Dog[name=牧羊犬, age=1]
Dog[name=田园犬, age=2]
Dog[name=哈士奇, age=3]

这个功能在 Java 15 中进行二次预览,在 Java 16 中正式发布。

3、Sealed Classes(密封类)预览

Sealed Classes 再次预览,在 Java 15 新特性介绍文章里已经介绍过相关功能,并且给出了详细的使用演示,这里不再重复介绍。

下面是一段引用:

我们都知道,在 Java 中如果想让一个类不能被继承和修改,这时我们应该使用 final 关键字对类进行修饰。不过这种要么可以继承,要么不能继承的机制不够灵活,有些时候我们可能想让某个类可以被某些类型继承,但是又不能随意继承,是做不到的。Java 15 尝试解决这个问题,引入了 sealed 类,被 sealed 修饰的类可以指定子类。这样这个类就只能被指定的类继承。

而且 sealed 修饰的类的机制具有传递性,它的子类必须使用指定的关键字进行修饰,且只能是 finalsealednon-sealed 三者之一。

扩展阅读:Java 15 新特性介绍

猜你喜欢

转载自blog.csdn.net/wang_luwei/article/details/125319511