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.toList 和Collectors.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; } }
下一篇:
Java市场饱和?他在忽悠你!