前言
之前一直用的是 jdk8,不过新项目上了 Spring Boot3.0,必须要用 jdk17 了,所以了解下 jdk8 之后的一些新特性吧~
本地变量 var
jdk10 提供的:
#原先我们需要这么定义
Test t = new Test();
#现在这样定义
var t1 = new Test();
其实就是一个语法糖,虚拟机可不认识 var,编译成字节码的时候,还是会找到变量的真正类型的。跟 java 的泛型机制差不多。
Switch 表达式
jdk13 引入了 yield,先来看下我们原先怎么写的:
int i;
switch(x) {
case "1":
i = 1;
break;
case "2":
i = 2;
break;
case "3":
i = 3;
break;
default:
i = x.length();
}
jdk13 我们可以写成:
int i = switch(x) {
case "1" -> 1;
case "2" -> 2;
case "3" -> 3;
default -> {
int len = x.length();
yield len;
}
}
或者:
int i = switch(x) {
case "1": yield 1;
case "2": yield 2;
case "3": yield 3;
default -> {
int len = x.length();
yield len;
}
}
这里的 yield 只是用来返回一个值,跟 return 不太一样,yield 只会跳出当前的 switch 块。
Text Blocks
jdk13 提供,现在写多行字符串方便多了,看下面的例子:
"""
<html>
<head>Title</head>
<body>
<p>Body</p>
</body>
</html>
"""
Records
jdk14 新特性,用来申明一个简单类的,这个类里面只有字段,编译器会自动创建所有方法并让所有字段参与 hashCode 等方法。
record Person(String name, Integer age){}
封闭类
很多场景中,我们写的接口或者父类,只允许我们指定范围的类去实现或者继承,这个时候就可以用到封闭类。关键字是 sealed,permits
public sealed interface Service permits Car,Truck { }
定义了一个封闭接口,只允许 Car、Truck 来实现。
继承也是一样的
public abstract sealed class Vechile permits Car,Truck { }
定义了一个抽象类 Verchile 只允许 Car 和 Truck 来继承
instanceof 模式匹配
我们以前一般在强转之前用来做判断的,比如:
if(animal instanceof Cat) {
Cat cat = (Cat) animal;
cat.eat();
} else if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.eat();
jdk14 中可以简写了:
if(animal instanceof Cat) {
cat.eat();
} else if (animal instanceof Dog) {
dog.eat();
}
强转那部分代码可以不用写了,更加的直观。
Switch 模式匹配
基于 instanceof 模式匹配这个特性,我们可以使用如下方式来处理对象 o
public static String formatter(Object o) {
String formatted = "";
if(o instanceof Integer i) {
formatted = String.format("int %d", i);
} else if (o instanceof Long l) {
formatted = String.format("long %d", l);
}
......
}
jdk17 中 switch 中的 case 还可以模式匹配,我们可以通过 switch 改写如下:
public static formatterPatternSwitch(Object o){
return switch(o) {
case Integer i -> String.format("int %d",i);
case Long l -> String.format("long %d",l);
......
default -> o.toString();
}
}
switch 处理的是 Object,而且也不是精确匹配,而是模式匹配了。
差不多就这些~
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于