JDK 17:从语法升级到云原生工程化分水岭的深度解析
上周团队里一个刚转 Java 的后端同学在本地跑一个 Spring Boot 3.x 的项目时死活启动不起来。控制台报了一堆关于java.lang.module的错他折腾了半天最后发现是因为他本地装的还是 JDK 8而项目要求 JDK 17。他一脸困惑地问我“JDK 17不就是版本号高了点吗我换成 JDK 11 行不行”这个问题很有意思。很多人对 JDK 的认知可能还停留在“8 是经典11 是 LTS长期支持再往后就是数字变大”的层面。但 JDK 17 远不止是一个版本号的跃迁。它不是一个简单的功能堆砌而是一个关键的“工程化分水岭”——它标志着 Java 正式从一门强调向后兼容、历史包袱沉重的语言转向一门为现代云原生、容器化、高密度部署环境而设计的平台。如果你只是把 JDK 17 当作 JDK 8 的“威力加强版”照着老教程改改pom.xml里的版本号那你很可能只触及其 10% 的价值却要承受 90% 的“水土不服”。真正的升级是从理解它为什么这样设计开始的。1. 为什么说 JDK 17 是“工程化分水岭”而不仅仅是新语法在 JDK 8 的时代我们写 Java 的核心场景是什么是单体的、长期运行的应用服务器。我们关心的是稳定的线程池、高效的 GC垃圾回收和丰富的生态库。但到了云和容器的时代环境变了应用需要快速启动、瞬间伸缩、并且对内存开销极其敏感因为按资源收费。一个启动慢、内存占用高的应用在 Kubernetes 里就是“烧钱机器”。JDK 17 的一系列特性正是为了应对这些新约束而生的。它不是零散的功能点而是一套组合拳。1.1 核心转变从“运行时优化”到“构建时与运行时协同”过去Java 的“一次编写到处运行”依赖于庞大的 Java 运行时环境JRE。你的jar包里只有业务代码运行时需要从 JRE 的rt.jar等地方加载成千上万个类。这带来了两个问题启动慢类加载、验证、解析、初始化步骤繁多。内存占用大即使你只用一个HashMap整个java.util包可能都被加载进内存。JDK 9 引入的模块化JPMS是解决这个问题的第一步但它太复杂很多开发者敬而远之。JDK 17 及其相关的工具链如 GraalVM Native Image将这条路走通了其思想是在应用构建编译阶段就分析出你的应用真正需要哪些 JDK 模块和第三方类然后打包成一个高度优化的、自包含的运行时镜像。这直接催生了两个对工程实践影响巨大的特性密封类Sealed Classes, JEP 409这不仅仅是语法糖。它允许你明确规定哪些类或接口可以继承或实现当前类。在构建时工具可以精确地知道一个密封类的所有可能子类从而进行更激进优化如将虚方法调用转换为直接调用。这为“构建时分析”提供了关键的元信息。模式匹配Pattern Matching for switch, JEP 406 预览同样switch表达式和模式匹配的增强使得代码逻辑更清晰同时也让编译器在构建时能更容易地分析出所有可能的执行路径有利于生成更高效的本地代码。这意味着什么这意味着 Java 应用的部署形态正在发生根本变化。你可以生成一个极小的、秒级启动的本地可执行文件Native Image直接扔进容器而不需要携带完整的 JRE。这对于 Serverless 函数如 AWS Lambda、CLI 工具、微服务 sidecar 等场景是革命性的。1.2 不只是“新特性”更是“新约束”下的答案很多教程一上来就罗列record、text block、switch表达式这容易让人陷入“语法对比”的误区。我们应该问这些特性共同解决了什么工程问题问题样板代码多意图不清晰容易出错。答案record(JEP 395)。一个不可变的、纯数据的载体类以前需要手写构造器、getter、equals、hashCode、toString现在一行record声明搞定。代码更简洁意图这是一个数据聚合更明确减少了人为错误。问题处理 JSON、SQL、HTML 等多行字符串在代码里很难看。答案文本块Text Blocks, JEP 378。用三个引号定义自动处理缩进让嵌入的多行文本变得可读。问题复杂的条件判断和类型转换代码冗长。答案模式匹配instanceof模式匹配 JEP 394,switch模式匹配 JEP 406。将类型检查和变量绑定合二为一代码更安全、更简洁。所以学习 JDK 17第一步是建立这个认知这些特性是为了让你写出更安全、更清晰、更利于工具链深度优化的现代 Java 代码最终服务于云原生时代的应用交付和运行效率。2. 从“知道”到“用好”关键特性深度解读与避坑指南知道了“为什么”我们再来看“怎么用”。这里重点讲几个最容易用错或理解不透的特性。2.1 Record不仅仅是“语法糖”而是设计契约// 传统Java类 public class Person { private final String name; private final int age; // 构造器、getter、equals、hashCode、toString ... 一大堆 } // JDK 17 Record public record Person(String name, int age) {}很多人在欢呼“少写代码”之后就以为record只是 Lombok 的替代品。这是最大的误解。record的核心是“透明持有数据”。它自动生成的是final字段和全参构造器。基于所有组件name,age的equals()、hashCode()、toString()。公开的、与组件同名的访问器方法person.name() 不是getName()。关键约束与设计意图不可变Immutablerecord的字段是final的。这意味着一个Person对象一旦创建其状态就无法改变。这极大地简化了并发编程和推理也符合函数式编程中“值对象”的理念。不能继承record隐式地是final的不能被继承。这保证了它的行为是确定和透明的。可以声明静态字段、静态方法、实例方法甚至紧凑构造器。public record Person(String name, int age) { // 静态字段 public static final Person UNKNOWN new Person(Unknown, 0); // 紧凑构造器用于验证 public Person { if (age 0) { throw new IllegalArgumentException(Age cannot be negative); } } // 实例方法 public String greeting() { return Hello, Im name; } }什么时候用recordDTO数据传输对象从 API 接收或返回的数据。值对象比如Money金额和货币、Range范围、Point坐标。复合键用于Map的键。中间计算结果。什么时候不用record需要可变状态的类如 Entity 实体通常有setter和生命周期。需要继承或被子类化的类。行为复杂、需要封装内部状态的类。避坑指南不要因为省事就把所有只有字段的类都改成record。先问自己这个对象的数据在生命周期内是否需要改变它是否是一个纯粹的“值”2.2 密封类Sealed Classes定义清晰的领域模型边界密封类解决了面向对象设计中一个经典难题如何控制一个类的扩展性过去我们只能用final完全禁止扩展或者文档说明靠约定无强制力。密封类提供了第三种选择有限制的、白名单式的扩展。// 定义一个表示“形状”的密封接口 public sealed interface Shape permits Circle, Rectangle, Triangle { // 只允许这三个实现类 } // 实现类必须是 final, sealed, 或 non-sealed public final class Circle implements Shape { /* ... */ } public final class Rectangle implements Shape { /* ... */ } public sealed class Triangle implements Shape permits EquilateralTriangle { /* ... */ } public final class EquilateralTriangle extends Triangle { /* ... */ }为什么这很重要更强的领域建模在编译器层面强制了“形状只有圆、矩形、三角形”这种领域知识。任何试图添加Pentagon类并实现Shape的代码都会在编译期报错。赋能模式匹配当switch处理Shape时编译器知道所有可能的子类因此可以提供编译期检查确保你处理了所有情况穷尽性检查。进行潜在的运行时优化。double area switch(shape) { case Circle c - Math.PI * c.radius() * c.radius(); case Rectangle r - r.width() * r.height(); case Triangle t - 0.5 * t.base() * t.height(); // 编译器知道Shape只有这三种安全 };提升代码安全性与可维护性避免了“野子类”的泛滥使代码结构更清晰后续开发者一目了然。避坑指南permits子句中的类必须和密封类在同一个模块内或者如果未命名模块则需在同一个包内。子类必须用final、sealed或non-sealed修饰明确其扩展性。这是一个“架构级”特性更适合用于定义核心的、稳定的领域模型或 API 接口而不是临时性的数据结构。2.3 模式匹配告别冗长的instanceof和强制转换这是让 Java 代码变得更简洁、更安全的一组特性。instanceof模式匹配JDK 16 正式// 旧写法冗长且重复 if (obj instanceof String) { String s (String) obj; // 使用 s } // 新写法一步到位 if (obj instanceof String s) { // 直接使用 s 它已经被自动转换和绑定了 System.out.println(s.length()); }变量s的作用域仅在if块内且只有在instanceof检查通过后才可用非常安全。switch表达式与模式匹配预览特性需启用--enable-preview这可能是 JDK 17 中最激动人心的特性之一它彻底改变了switch的用法。// 传统switch只是值匹配 String type A; switch (type) { case A: System.out.println(Type A); break; case B: System.out.println(Type B); break; default: System.out.println(Unknown); } // Switch 表达式有返回值更紧凑 String result switch (type) { case A - Type A; case B - Type B; default - Unknown; }; // 模式匹配 Switch根据类型和属性进行匹配 Object obj getSomeObject(); String formatted switch (obj) { case Integer i - String.format(int %d, i); case Long l - String.format(long %d, l); case Double d - String.format(double %f, d); case String s - String.format(String %s, s); case null - null; // 可以直接处理null default - obj.toString(); };关键优势穷尽性检查编译器会检查是否覆盖了所有可能的情况对于枚举或密封类避免遗漏。模式匹配case后面可以跟类型模式Integer i甚至可以结合守卫when子句进行更复杂的条件判断。空值安全可以直接用case null来处理空值避免了NullPointerException。返回值switch可以作为表达式返回值代码更函数式。避坑指南模式匹配switch在 JDK 17、18、19、20 中都是预览特性在 JDK 21 中才转为正式特性。生产使用需谨慎并明确编译和运行参数。理解箭头-和冒号:语法的区别。箭头语法一个分支只能跟一个表达式或throw语句不需要break。冒号语法是传统写法需要break。3. 性能与安全那些看不见但至关重要的增强除了语法糖JDK 17 在底层性能和安全上的提升对于生产系统可能更为关键。3.1 垃圾回收器ZGC 和 Shenandoah 走向成熟JDK 17 中Z Garbage Collector (ZGC) 和 Shenandoah GC 都已不再是实验特性。它们的目标都是在保证低延迟停顿时间极短的同时处理海量内存。ZGC主打亚毫秒级停顿停顿时间不会随堆大小增长而增加。适合对响应时间要求极高的服务如金融交易、实时推荐。Shenandoah同样追求低停顿其工作方式与 ZGC 略有不同在并发处理阶段开销可能略高但整体表现也非常出色。如何选择如果你的应用追求极致的、可预测的短停顿 10ms堆内存较大数十GB以上优先考虑ZGC(-XX:UseZGC)。如果你在 Red Hat 系环境中或对 Shenandoah 有更多经验Shenandoah(-XX:UseShenandoahGC) 也是成熟选择。对于大多数中小型、吞吐量优先的应用传统的G1 GC(-XX:UseG1GC) 仍然是稳健的默认选项。关键启动参数示例# 使用ZGC并设置最大堆内存 java -XX:UseZGC -Xmx4g -jar myapp.jar # 使用Shenandoah java -XX:UseShenandoahGC -Xmx4g -jar myapp.jar3.2 增强的伪随机数生成器java.util.random包被彻底重构JEP 356。新增了RandomGenerator接口和多种算法实现如 L32X64MixRandom, L128X128MixRandom。为什么需要新的随机数生成器旧的java.util.Random和ThreadLocalRandom在并发场景下可能存在性能瓶颈或统计质量不足的问题。新的实现提供了更好的性能尤其在高并发下。更高的质量更长的周期更好的统计属性。算法可插拔可以方便地切换不同的算法。// 旧方式 Random random new Random(); // 新方式获取一个高性能的随机数生成器实例 RandomGenerator generator RandomGenerator.getDefault(); // 或者 RandomGenerator.of(L32X64MixRandom) int randomNum generator.nextInt(100);对于模拟、游戏、安全令牌生成等依赖高质量随机数的场景这是一个重要的底层升级。3.3 强封装 JDK 内部 API从 JDK 9 模块化开始到 JDK 16JEP 396默认强封装再到 JDK 17访问 JDK 内部 API如sun.misc.Unsafe或com.sun.*包下的类变得越来越困难。影响很多老旧的库或框架如果通过反射强行调用这些内部 API在 JDK 17 上默认会抛出IllegalAccessError。解决方案首选升级你的库/框架到兼容 JDK 17 的版本。主流框架Spring Boot, Hibernate, Netty等的新版本都已解决此问题。临时方案不推荐用于生产使用命令行参数--add-opens或--add-exports打开特定的模块封装。但这破坏了模块化的安全性应视为临时迁移手段。java --add-opens java.base/java.langALL-UNNAMED -jar myapp.jar建议将迁移到 JDK 17 作为升级你整个技术栈框架、库、构建工具的契机而不是通过打补丁的方式勉强运行。4. 迁移实战从旧版本升级到 JDK 17 的路线图升级不是改个版本号那么简单。遵循一个系统化的路径可以避免很多坑。4.1 升级前准备环境与依赖清查开发与构建环境IDE确保 IntelliJ IDEA、Eclipse 等支持 JDK 17。构建工具Maven (3.8) / Gradle (7.x) 升级到兼容版本。在pom.xml或build.gradle中指定maven.compiler.source/target或java.toolchain。CI/CD 流水线更新构建节点的 JDK 版本。依赖项审计运行mvn dependency:tree或gradle dependencies列出所有依赖。逐一检查核心依赖Spring, MyBatis, 数据库驱动网络框架工具库等是否有支持 JDK 17 的版本。优先使用各依赖的官方稳定版。特别注意那些使用了大量反射、字节码操作如 CGLIB, ASM或访问内部 API 的库如某些老版本的 Apache Commons、Fastjson 等。4.2 分阶段升级策略不建议从 JDK 8 直接跳到 JDK 17。更平滑的路径是JDK 8 - JDK 11 - JDK 17。第一阶段升级到 JDK 11 (LTS)。JDK 11 移除了 Java EE 和 CORBA 模块这是一个主要的破坏性变更。先解决这个问题。确保你的应用在 JDK 11 上能正常运行。第二阶段升级到 JDK 17 (LTS)。从 JDK 11 到 17破坏性变更相对较少主要是强封装内部 API 和移除某些已废弃的 API。此时可以开始尝试使用新特性。4.3 编译、测试与问题排查编译使用新的 JDK 编译项目。注意处理--release参数Maven Compiler Plugin 的release配置它比source/target更严格能更好地确保跨版本兼容性。静态分析使用 IDE 的代码检查或 SonarQube 等工具找出使用已废弃 API 的代码。单元测试与集成测试这是最重要的环节。确保测试覆盖率足够并在 JDK 17 环境下完整运行。测试是发现因内部 API 访问、行为差异如随机数、日期处理导致问题的最佳手段。常见问题排查清单类找不到/类加载错误检查模块化相关错误是否缺少--add-modules。非法反射访问警告在日志中搜索WARNING: Illegal reflective access。这表示有库在访问内部 API未来版本可能会失效。需要升级该库或临时使用--add-opens。性能变化切换到 ZGC/Shenandoah 后监控 GC 日志和应用性能指标延迟、吞吐量。可能需要调整 GC 相关参数。行为差异重点关注与随机数、加密、序列化、网络相关的行为。4.4 渐进式采用新特性不要试图一次性重写所有代码。按价值排序逐步采用低成本高收益先使用record替换简单的 DTO/值对象使用文本块处理多行 SQL/JSON。这能立即提升代码清晰度且风险极低。影响架构在定义新的核心领域模型或 API 时考虑使用密封类。对现有的大规模继承体系进行密封化改造需要谨慎评估。预览特性如模式匹配switch可以在非核心的工具类或新项目中小范围试用并明确标注需要--enable-preview参数。生产环境大规模使用需等待其转正如 JDK 21。性能特性在充分测试和监控下于性能关键型服务中尝试启用 ZGC。4.5 监控与调优升级后进入一个强化监控期GC 日志开启并分析 GC 日志 (-Xlog:gc*)。应用指标监控应用的响应时间 (P99, P999)、吞吐量、错误率。内存与 CPU观察容器的内存和 CPU 使用率变化。启动时间如果使用 Spring Boot 3 和 GraalVM Native Image对比启动时间和内存占用的优化效果。迁移到 JDK 17 不是一个简单的技术任务而是一次将你的应用架构和开发实践推向现代云原生环境的系统工程。它带来的不仅是更简洁的语法更是更快的启动速度、更低的内存开销、更强的安全封装和更清晰的代码结构。从这个角度理解 JDK 17你的升级之路才会方向明确价值倍增。

相关新闻

PX4-Autopilot 完整开发工作流实战:从克隆源码到首飞的 5 个关键关卡

PX4-Autopilot 完整开发工作流实战:从克隆源码到首飞的 5 个关键关卡

PX4-Autopilot 完整开发工作流实战:从克隆源码到首飞的 5 个关键关卡 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4-Autopilot 是一款开源无人机自动驾驶仪软件,负责把…

2026/8/21 8:45:25 阅读更多 →
Mac 菜单栏塞满了?Ice 带你三十分钟从混乱到清爽

Mac 菜单栏塞满了?Ice 带你三十分钟从混乱到清爽

Mac 菜单栏塞满了?Ice 带你三十分钟从混乱到清爽 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 你有没有过这种时刻:想在菜单栏里找一个图标,眯着眼数格子&#…

2026/8/21 8:45:25 阅读更多 →
Gemini深度集成Google Workspace:从AI工具到智能工作流引擎的变革

Gemini深度集成Google Workspace:从AI工具到智能工作流引擎的变革

最近在尝试把一些日常文档处理、邮件整理和会议纪要的活儿交给 AI 助手时,遇到了一个挺有意思的困境:很多工具要么功能太单一,只能做简单的文本润色;要么就是需要我在不同的应用之间反复横跳,复制粘贴,流程…

2026/8/21 8:45:25 阅读更多 →

最新新闻

ADEPT:预训练+后训练强化学习框架,提升机器人灵巧操作效率

ADEPT:预训练+后训练强化学习框架,提升机器人灵巧操作效率

这次我们来看一个强化学习领域的新方法:ADEPT。这个项目来自加州大学伯克利分校和斯坦福大学的研究团队,核心目标是解决机器人灵巧操作任务中数据效率低、泛化能力差的问题。简单说,ADEPT 提出了一套“预训练 后训练”的强化学习框架&#x…

2026/8/22 10:59:18 阅读更多 →
基于 Vue 3、ECharts / ECharts-GL 与 数字孪生 思路打造的智慧城市可视化大屏——云枢智城 · 数字孪生可视化系统

基于 Vue 3、ECharts / ECharts-GL 与 数字孪生 思路打造的智慧城市可视化大屏——云枢智城 · 数字孪生可视化系统

云枢智城 数字孪生可视化系统 基于 Vue 3、ECharts / ECharts-GL 与 数字孪生 思路打造的智慧城市可视化大屏。 中央为可交互的世界/国家/省/市/街道孪生地图,四周以透明面板叠加多类数据图表;配套登录鉴权、角色权限、SQLite 数据管理、样式配置与拥堵…

2026/8/22 10:59:18 阅读更多 →
基金定投01-定投的底层数学:为什么波动率收割是普通投资者最稳的收益来源

基金定投01-定投的底层数学:为什么波动率收割是普通投资者最稳的收益来源

揭秘定投成本平滑:为什么你的持仓成本必然低于市场平均价本系列基于《A股、美股、港股基金定投全策略深度研究报告》。本文为第 01 篇,聚焦定投的核心逻辑:波动率收割与成本平滑。黄金 100 字开头你是否遇到过这样的场景:攒了一笔…

2026/8/22 10:59:17 阅读更多 →
Android省市区选择器两步搞定:CityPicker快速集成指南

Android省市区选择器两步搞定:CityPicker快速集成指南

Android省市区选择器两步搞定:CityPicker快速集成指南 【免费下载链接】citypicker citypicker城市选择器,详细的省市区地址信息,支持仿iOS滚轮实现,仿京东样式,一级或者三级列表展示方式。 项目地址: https://gitco…

2026/8/22 10:59:17 阅读更多 →
IT 领导者使用可观测性监控 AI 应用的 7 条经验

IT 领导者使用可观测性监控 AI 应用的 7 条经验

作者:来自 Elastic Brad Quarry 通过 LLM 可观测性证明 AI 价值需要什么 在六个月的时间里,Elastic IT 团队运行的内部 AI 应用为业务节省了价值 250 万美元的运营时间。 一个对话式支持助手让我们从零数字化解决率 —— 任何复杂问题都会变成一个工单 —…

2026/8/22 10:59:16 阅读更多 →
机器人技术从Demo到产线:拆解价格分化与工程化落地实战

机器人技术从Demo到产线:拆解价格分化与工程化落地实战

如果你最近关注机器人行业,可能会被两种截然相反的信息搞懵:一边是各种展会、发布会上,人形机器人、协作机器人、四足机器人轮番登场,价格动辄数十万甚至上百万,让人感觉“未来已来”;另一边,在…

2026/8/22 10:58:16 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →