Java16新特性及代码示例

你好啊,我是大阳。
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 integersAsString = Arrays.asList("1", "2", "3"); //之前这样写 List ints = integersAsString.stream().map(Integer::parseInt).collect(Collectors.toList()); //现在可以这样写 List 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 Starimplements Shape {} final class Cometimplements Shape {} }public abstract sealed class Test{ final class A extends Test {} final class B extends Test {} final class C extends Test {} }

5. record纪录类(标准版) 【Java16新特性及代码示例】传统的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; } }

    推荐阅读