前言

最近入职了一家新公司,发现新东家采用的技术栈相当新潮,这让长期“坚守”Java 8 的我颇感意外。正是这份新鲜感,这才催生了这篇博客。
本文无意深入原理,仅对新特性做简要梳理,方便日后查阅与回顾。

新特性

Var局部类型推断

var是Java 10版本引入的新特性,它的核心能力是让编译器根据初始表达式来推断左边的数据类型,而非传统的由程序员手动指定。var有助于减少样板代码,在使用得当的情况下也有助于提高代码可读性,同时它也有它的局限性,比如只能用于局部变量、必须初始化变量、不能用于Lambda表达式等等,下面觉几个简单的例子。

1
2
3
4
5
6
7
8
9
10
static void main() {
var a = 520;
String b = "hello";
System.out.println(b + " " + a);
var c = new HashMap<>();
c.put("name", "张三");
for (var entry : c.entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}

文本块

文本块在JDK15正式引入,主要是解决Java传统的字符串在编写涉及多行内容时不便问题,这些操作往往需要包含换行、转义等行为,导致代码可读性特别差。

文本块以 “”” 开始,以 “”” 结束,下面我们比较下传统的写法,和文本块的写法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static  void main() {
String traditionalStr = "{\n" +
" \"name\": \"张三\",\n" +
" \"age\": 30,\n" +
" \"hobbies\": [\"阅读\", \"游泳\"]\n" +
"}";
String textBlockStr = """
{
"name": "张三",
"age": 30,
"hobbies": ["阅读", "游泳"]
}
""";
System.out.println(traditionalStr);
System.out.println(textBlockStr);
}