乐趣区

关于java: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<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;}
}
退出移动版