Skip to content

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);

上次更新时间:

最近更新