JDK 17 好用的文本块(Text Blocks)、switch 表达式、密封类(Sealed Classes)
一、文本块(Text Blocks)
在 JDK 17 之前(准确说 JDK 15 预览、17 正式转正),如果你想在代码里写一段多行的字符串(比如 SQL、JSON),得手动加换行符\n、转义双引号\",代码又乱又容易错。
比如以前写一段 SQL 是这样的:
// JDK 17之前的写法,又乱又容易写错
String sql = "SELECT id, name, age FROM user \n" +
"WHERE age > 18 \n" +
"AND status = \"active\" \n" +
"ORDER BY create_time DESC";用了文本块之后,直接用"""包裹多行字符串,不用转义、不用拼换行,代码一眼就能看明白:
// JDK 17文本块写法,简洁又清晰
String sql = """
SELECT id, name, age FROM user
WHERE age > 18
AND status = "active"
ORDER BY create_time DESC
""";二、switch 表达式
以前 switch 只能当语句用,必须写 break,容易漏;现在可以当表达式用,直接返回值,代码更简洁:
// 旧写法
String day;
switch (week) {
case 1: day = "周一"; break;
case 2: day = "周二"; break;
default: day = "未知";
}
// JDK 17新写法
String day = switch (week) {
case 1 -> "周一";
case 2 -> "周二";
default -> "未知";
};三、密封类(Sealed Classes)
适合做架构设计时用,能精准控制哪些类可以继承 / 实现某个类 / 接口,避免无限制扩展导致的混乱。比如定义一个只能被 A、B 类继承的父类:
// 密封类:只有UserServiceImpl和AdminServiceImpl能实现这个接口
public sealed interface UserService
permits UserServiceImpl, AdminServiceImpl {}
// 允许实现
public final class UserServiceImpl implements UserService {}
// 允许实现
public final class AdminServiceImpl implements UserService {}
// 报错:没在permits里声明,不能实现
// public class GuestServiceImpl implements UserService {}正文到此结束
- 本文标签: JDK 17 新特性
- 本文链接: https://www.15102.com/article/17
- 版权声明: 本文由原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权