简述
SpringBoot3.x
已发布,Java8
从发布到现在也已经有了快10年的时间了,而SpringBoot3.x
支持的最低JDK的版本也是Java17
了。
对于框架的版本升级,我们关注的不只是版本号的改变还有框架本身的改变,还要关注升级后的框架对其他框架以及核心Java
版本的支持情况。
对于新技术新框架的出现和迭代,对于开发人员来说,更多的还是学习成本的提高,随着框架的迭代和软件技术领域的发展,开发人员和软件公司不可能一直使用旧的版本来开发软件,这样以来也就大大提高了开发人员的学习成本。
Java9 ~ Java17 特性
var
关键字
var
关键字:更简洁的方式声明局部变量
// java 8
Map<String, List<MyDtoType>> myMap = new HashMap<String, List<MyDtoType>>();
List<MyDomainObjectWithLongName> myList = aDelegate.fetchDomainObjects();
//var 语法特性
var map = new HashMap<String, String>();
var list = new LinkedList<>(List.of("zs"));
var anyMatch = list.stream().anyMatch((var s) -> s.equals("zs"));
if (anyMatch) {
System.out.println(anyMatch);
}
Switch的简化
可以看出对Switch语句做了很大的优化
public static void main(String[] args) {
//对Switch语句的简化操作
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
var freeDay = switch (dayOfWeek) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> false;
case SATURDAY, SUNDAY -> true;
};
System.out.println("今天是否是工作日:" + (freeDay ? "否" : "是"));
// 可以使用yield 来返回结果
freeDay = switch (dayOfWeek) {
case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> {
System.out.println("Work work work");
yield false;
}
case SATURDAY, SUNDAY -> {
System.out.println("Yey, a free day!");
yield true;
}
};
System.out.println("今天是否是工作日:" + (freeDay ? "否" : "是"));
System.out.println(formatterPatternSwitch(null));
System.out.println(formatterPatternSwitch("1"));
System.out.println(formatterPatternSwitch(2));
System.out.println(formatterPatternSwitch(3L));
System.out.println(formatterPatternSwitch(4.0));
System.out.println(formatterPatternSwitch(new AtomicLong(5)));
}
/*****************************【以下为预览功能】******************************/
// 可以根据传入的类型做判断,并打印输出内容(类似于 instanceof )
static String formatterPatternSwitch(Object o) {
return switch (o) {
case Integer
i -> String.format("int %d", i);
case Long
l -> String.format("long %d", l);
case Double
d -> String.format("double %f", d);
case String
s -> String.format("String %s", s);
default -> o.toString();
};
}
// 可以看到,switch不只是类型自动转换,还可以直接判断是否是null
static String formatterPatternSwitch2(Object o) {
return switch (o) {
case null -> "null";
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> o.getClass().getSimpleName() + " " + o;
};
}
instanceof实例匹配
instanceof:对于if…else…中也做了优化,可以直接使用类型转换变量
// Java8 写法
if (obj instanceof MyObject) {
MyObject myObject = (MyObject) obj; // 强制转换
}
//Java17写法,可以在 if 语句中声明变量,并使用该变量
Object object = new MyObject();
if (object instanceof MyObject myObject && myObject.isTrue()) {
String result = myObject.run();
System.out.println("result = " + result);
}
class MyObject {
public String run() {
System.out.println("run");
return "我执行完成了";
}
public boolean isTrue() {return true;}
}
“”“ ”“”文本块
对于这种
String str = "我又来写BUG了,又是难忘的一天。"
String str = """
我又来写BUG了, \
又是难忘的一天。
""";
System.out.println(str); // 我又来写BUG了,又是难忘的一天。( \表示文本不换行)
str = """
我又来写BUG了,
又是难忘的一天。
""";
System.out.println(str); // 对于没有 \ 的文件将会换行显示
Files快速写入文件
必须保证
E:/temp/test.txt
该文件的存在,否则会抛出异常
// 第一种,使用Path
Path of = Path.of("E:/temp/test.txt");
// 写入文本
Path writeString = Files.writeString(of, "这是一段文本", StandardCharsets.UTF_8);
// 读取文本
String string = Files.readString(writeString, StandardCharsets.UTF_8);
System.out.println(string);
// 第二种,使用Paths
Path temp = Paths.get("E:/", "temp", "test.txt");
// 写入文本
Path path = Files.writeString(temp, "Pretius Rules All !");
// 读取文本
String fileContent = Files.readString(path);
System.out.println(fileContent);