Java16新特性及代码示例

  |   0 评论   |   0 浏览

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;
    }
}

转自https://zhuanlan.zhihu.com/p/483824054


标题:Java16新特性及代码示例
作者:michael
地址:https://blog.junxworks.cn/articles/2022/12/02/1669972438019.html