JDK 17 正式特性

1. 密封类 sealed class(架构约束、防止随意继承)

场景:框架底层基类、枚举扩展、状态机基类,强制限定哪些类可以继承,避免滥用继承破坏设计。

java 复制代码
// 父类:只允许 OrderPay、OrderRefund 继承
public sealed abstract class OrderState permits OrderPay, OrderRefund {
    public abstract String getStateDesc();
}

// 子类必须声明 final / sealed / non-sealed
public final class OrderPay extends OrderState {
    @Override
    public String getStateDesc() {
        return "已支付";
    }
}

public final class OrderRefund extends OrderState {
    @Override
    public String getStateDesc() {
        return "已退款";
    }
}

2. Record 记录类(替代简单 POJO,不可变数据载体)

场景:DTO、数据库返回实体、接口入参、缓存对象,省去 get/set/toString/equals

java 复制代码
// 一行搞定不可变实体,自动构造器、get、equals、hashCode、toString
public record UserDTO(Long id, String username, Integer age) {}

// 使用
public static void main(String[] args) {
    UserDTO user = new UserDTO(1L, "zhangsan", 25);
    System.out.println(user.id());
    System.out.println(user.username());
}

3. instanceof 模式匹配(消除强转样板代码)

场景:多类型参数判断、策略分发

java 复制代码
public static void printObj(Object obj) {
    // JDK17:直接在判断时绑定变量,无需强转
    if (obj instanceof String s) {
        System.out.println("字符串长度:" + s.length());
    } else if (obj instanceof Integer num) {
        System.out.println("数字平方:" + num * num);
    }
}

4. Switch 表达式(转正,替代冗长 if-else)

场景:状态码翻译、枚举映射、业务分支判断

java 复制代码
public static String getOrderStatus(Integer code) {
    return switch (code) {
        case 0 -> "待支付";
        case 1 -> "已支付";
        case 2 -> "已取消";
        default -> "未知状态";
    };
}

5. 文本块 """ 多行字符串

场景:SQL 语句、JSON、HTML、接口报文,不用转义换行和引号

java 复制代码
String sql = """
        SELECT id, name, create_time
        FROM t_user
        WHERE status = 1
        ORDER BY create_time DESC
        LIMIT 10
        """;

6.JDK17 整体选型场景

  1. JDK8 老项目平滑升级,改动最小;
  2. 需要保留 CMS GC、兼容大量旧依赖反射;
  3. 只想用上现代 Java 语法,不做架构重构;
  4. 稳定优先,生态最成熟。
相关推荐
OxYGC6 小时前
[AI工程] Spring AI 第十四篇:Agent 五种模式在 2.0 里怎么写
java·spring·ai·ai编程
code2cat6 小时前
【随笔】从聊天到调用工具:理解MCP在AI应用中的位置
java·人工智能
2501_933923256 小时前
Spring Bean作用域揭秘:单例、原型、请求与会话的区别
java·后端·spring·java-ee
wuyk5556 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
学编程就要猛6 小时前
基于Spring AI 的智能聊天机器人
java·spring ai·chat robot
修炼室6 小时前
Java开发工程师笔试经验贴【高频知识】
java
船厂电气自动化ai大模型6 小时前
AI大模型与数学|第81天 课程:正交向量、正交基、格拉姆‑施密特(Gram‑Schmidt)正交化
开发语言·数据结构·人工智能·线性代数·机器学习
木井巳7 小时前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法
杨杨杨大侠7 小时前
知识库已经有了,Java 程序员还要做什么?Spring AI RAG 实战
java·openai·ai编程
伊信7 小时前
Spring AI 基础学习与应用
java·后端