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 {
}
发表回复