-
1、文本块
在Java17之前的版本里,如果我们需要定义一个字符串,比如一个JSON数据,基本都是如下方式定义:
public void lowVersion() { String text = "{n" + " "name": "小黑说Java",n" + " "age": 18,n" + " "address": "北京市西城区"n" + "}"; System.out.println(text);}这种方式定义具有几个问题:
双引号需要进行转义;
为了字符串的可读性需要通过+号连接;
如果需要将JSON复制到代码中需要做大量的格式调整(当然这一点也可以通过其他工具解决);
通过Java 17中的文本块语法,类似的字符串处理则会方便很多;通过三个双引号可以定义一个文本块,并且结束的三个双引号
不能和开始的在同一行。
上面例子中的JSON可以更方便,可读性更好的通过文本块定义。代码如下:
private void highVersion() { String text = """ { "name": "小黑说Java", "age": 18, "address": "北京市西城区" } """; System.out.println(text);}这段代码的输出结果是:
{ "name": "小黑说Java", "age": 18, "address": "北京市西城区"} -
2、switch表达式
Java 17版本中switch表达式将允许switch有返回值,并且可以直接作为结果赋值给一个变量,等等一系列的变化。
下面有一个switch例子,依赖于给定的枚举值,执行case操作,故意省略break。

我们调用这个方法传入一个APPLE,会输出以下结果:

显然这不是期望的结果,因为我们需要在每个case里添加break防止所有的case都没执行。

switch表达式也可以返回一个值,比如上面的例子我们可以让switch返回一个字符串来表示我们要打印的文本。需要注意在switch语句的最后要加一个分号。

也可以直接省略赋值动作直接打印。

如果你想在case里想做不止一件事,比如在返回之前先进行一些计算或者打印操作,可以通过大括号来作为case块,最后的返回值使用关键字yield进行返回。

这个输出结果是:

当然也可以直接使用yield返回结果。

-
3、record关键字
record用于创建不可变的数据类。在这之前如果你需要创建一个存放数据的类,通常需要先创建一个Class,然后生成构造方法、getter、setter、hashCode、equals和toString等这些方法,或者使用Lombok来简化这些操作。
比如定义一个Person类:

我们来通过Person类做一些测试,比如创建两个对象,对他们进行比较,打印这些操作。

假设有一些场景我们只需要对Person的name和age属性进行打印,在有record之后将会变得非常容易。

record也可以单独定义作为一个文件定义,但是因为Record的使用非常紧凑,所以可以直接在需要使用的地方直接定义。

record同样也有构造方法,可以在构造方法中对数据进行一些验证操作。

关闭