SpringBoot3.0最低反对JDK17,各开源软件正在全面拥抱JDK17.

在2022年Java开发人员生产力报告中,有降级打算的考察受访者中,37%的人打算在将来六个月内降级到2021年9月份公布的LTS版本JDK 17。另有25%的人打算在将来6到12个月内降级到JDK 17。

这5个你喜爱的JDK17新性能,会让你降级JDK17吗?

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

2. 新的字符串办法

从JDK8到JDK17陆续减少了更多字符串办法,操作字符串更简略了。

  • isBlank():如果字符串为空或字符串仅蕴含空格(包含制表符),则返回 true。留神与isEmpty() 不同,isEmpty()仅在长度为 0 时返回 true。
  • lines():将字符串拆分为字符串流,每个字符串蕴含一行。
  • strip() : 别离从结尾和结尾;
  • stripLeading()/stripTrailing()仅开始和仅完结删除空格。
  • repeat(int times):返回一个字符串,该字符串采纳原始字符串并按指定的次数反复该字符串。
  • readString():容许从文件门路间接读取到字符串。
  • writeString(Path path):将字符串间接写入指定门路处的文件。
  • indent(int level):缩进字符串的指定量。负值只会影响前导空格。
  • transform(Function f):将给定的 lambda 利用于字符串。
package cn.dayangshuo;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.util.stream.Stream;/** * @author DAYANG */public class NewStringMethod {    public static void main(String[] args) throws IOException {        //lines()办法示例        String str = "hello \njava17 \n\r!\r";        Stream<String> lines = str.lines();        lines.forEach(System.out::println);        //readString()办法示例        Path path = Path.of("C:\\NewStringMethod.java");        String text = Files.readString(path);        System.out.println(text);    }}

3. 清新的switch表达式

上代码:

package cn.dayangshuo;/** * @author DAYANG */public class OldSwitch {    public static void main(String[] args) {        oldSwitch();        newSwitch();    }        private static void oldSwitch() {        int size = 3;        String cn = "";        switch (size) {            case 1:                cn = "壹";                break;            case 2:                cn = "贰";                break;            case 3:                cn = "叁";                break;            default:                cn = "未知";        }        System.out.println(cn);    }    //更清新    private static void newSwitch() {        int size = 3;        String cn = switch (size) {            case 1 -> "壹";            case 2 -> "贰";            case 3 -> "叁";            default -> "未知";        };        System.out.println(cn);    }}

4. 文本块

Java解决json或者xml文本时,须要多个繁琐的嵌套本义,代码写着吃力,保护更吃力。从Java13开始引入了文本块(Text blocks),上代码:

package cn.dayangshuo;/** * @author DAYANG */public class TextBlocks {    public static void main(String[] args) {        //须要本义        String jsonStr = "{\"name\": \"大阳\"}";        //文本块,不须要转义字符        String textBlocks = """                {"name": "大阳"}                """;        System.out.println(jsonStr);        System.out.println(textBlocks);    }}

5. 密封类(Sealed classes)

package cn.dayangshuo;/** * 定义一个形象密封类Pet,它的实现类只能是Dog, Cat这两个,其余的实现类均不容许 * @author DAYANG */public abstract sealed class Pet    permits Dog, Cat {}final class Dog extends Pet {}final class Cat extends Pet {}