jdk更新 - 21
新版本引入了大量语法糖和新特性,旨在消除冗长的“样板代码”,让代码更简洁、更安全、更具表达力。
Records (记录类 - JDK 16) :一句话定义不可变的数据载体类 (DTO/POJO),自动生成构造函数、equals()、hashCode()、toString() 和 getter。
java//JDK 11 public final class Point { private final int x; private final int y; // + 构造函数, getters, equals, hashCode, toString... (约50行代码) } //JDK 21 public record Point(int x, int y) { } // 1行代码搞定Switch 模式匹配 (Pattern Matching for Switch - JDK 21) :让 switch 语句变得前所未有的强大和安全,可以直接对对象的类型和属性进行判断,消除了繁琐的 if-else 和类型强转。
java//JDK 11 Object obj = ...; if (obj instanceof String) { String s = (String) obj; System.out.println("String: " + s.toUpperCase()); } else if (obj instanceof Integer) { // ... } //JDK 21 Object obj = ...; switch (obj) { case String s -> System.out.println("String: " + s.toUpperCase()); case Integer i -> System.out.println("Integer: " + i); default -> { } }文本块 (Text Blocks - JDK 15) :优雅地编写多行字符串,告别丑陋的 + 拼接和 \n 转义,尤其适合编写 SQL、JSON、HTML 等。
java//JDK 11 String json = "{\n" + " \"name\": \"John\",\n" + " \"age\": 30\n" + "}"; //JDK 21 String json = """ { "name": "John", "age": 30 } """;
字符串模板(String Templates)
java
// 日志输出
String userId = "u123";
log.info(STR."用户\{userId}登录成功,IP:\{request.getRemoteAddr()}");
// JPA查询(配合Spring Data JPA)
@Query(STR."SELECT u FROM User u WHERE u.name = \{name} AND u.status = 'ACTIVE'")
List<User> findActiveUsers(String name);