你好啊,我是大阳。

Java 16 于 2021 年 3 月 16 日公布。在这篇文章中,咱们将介绍增加的一些个性以及一些代码示例。

Java16的次要更新内容如下:

  • 时段反对
  • 增加Stream.toList办法
  • instanceof的模式匹配
  • 密封类(第二次预览版)
  • record纪录类(标准版)

1. 时段反对

DateTimeFormatter的新增性能,能够示意一天中的时段,例如“上午”、“下午”

package cn.dayangshuo.collectors;import java.time.LocalTime;import java.time.format.DateTimeFormatter;/** * @author DAYANG */public class DateTimeTest {    public static void main(String[] args) {        String date1 = DateTimeFormatter.ofPattern("a").format(LocalTime.now());        String date2 = DateTimeFormatter.ofPattern("B").format(LocalTime.now());        String date3 = DateTimeFormatter.ofPattern("k").format(LocalTime.now());        System.out.println(date1);        System.out.println(date2);        System.out.println(date3);    }}//下午//下午//17

2. 增加Stream.toList办法

当初咱们能够应用Collectors.toListCollectors.toSet来缩小一些模板代码:

List<String> integersAsString = Arrays.asList("1", "2", "3");//之前这样写List<Integer> ints = integersAsString.stream().map(Integer::parseInt).collect(Collectors.toList());//当初能够这样写List<Integer> intsEquivalent = integersAsString.stream().map(Integer::parseInt).toList();

3. instanceof的模式匹配

之前:

Object obj = "大阳";if (obj instanceof String) {    String t = (String) obj;    // TODO}

当初:

Object obj = "大阳";if (obj instanceof String t) {    // TODO}

4. 密封类(第二次预览版)

密封的类和接口限度了其余类或接口能够扩大或实现它们

public sealed interface Shape{    final class Planet implements Shape {}    final class Star   implements Shape {}    final class Comet  implements Shape {}}public abstract sealed class Test{    final class A extends Test {}    final class B extends Test {}    final class C extends Test {}}

5. record纪录类(标准版)

传统的Java应用程序通过创立一个类,通过该类的构造方法实例化类,并通过getter和setter办法拜访成员变量或者设置成员变量的值。有了record关键字,你的代码会变得更加简洁。

package cn.dayangshuo;/** * 一般的dto * @author DAYANG */public class NormalEntity {    public static void main(String[] args) {        //传统的形式        User1 user1 = new User1("大阳", 1990);        System.out.println(user1);        //reocrd 记录类        User2 user2 = new User2("大阳", 1990);        System.out.println(user2);    }}/** * 成员变量都是固定的 */class User1 {    String name;    Integer age;    public User1(String name, Integer age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public String toString() {        return "User1[" +                "name='" + name + '\'' +                ", age=" + age +                ']';    }}package cn.dayangshuo;/** * record 记录类 * 你也能够覆写equals() hashCode() toString()办法 * @author DAYANG */record User2(String name, Integer age) {    @Override    public String toString() {        return "User2[" +                "name='" + name + '\'' +                ", age=" + age +                ']';    }    @Override    public boolean equals(Object obj) {        return false;    }    @Override    public int hashCode() {        return 0;    }}