You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 16出现Unable to make protected final java.lang.Class报错如何解决

问题原因说明

这个报错是Java 9引入的JPMS(Java平台模块系统)强封装规则导致的,Java 16版本开始默认禁止所有对JDK内部非公开API的非法反射访问。你项目中用到的动态代理、字节码增强类框架(如旧版CGLIB、ASM、Spring核心包等)需要通过反射调用ClassLoader.defineClass方法完成类的动态生成,而java.base模块默认未开放java.lang包的访问权限给未命名模块,因此触发该错误。

调整方案
  • 方案1(快速适配,无需改代码):在JVM启动参数中添加开放权限配置:
    --add-opens java.base/java.lang=ALL-UNNAMED
    
    如果后续还有其他包的访问报错,可以对应补充参数,比如涉及java.util包的访问问题就加--add-opens java.base/java.util=ALL-UNNAMED。
  • 方案2(推荐,长期稳定):升级项目的核心依赖到适配Java 16+的版本,比如Spring Boot升级到2.6及以上、Spring Cloud升级到2021.0及以上,主流微服务框架的高版本已经兼容JPMS规则,无需额外添加启动参数。
  • 方案3(自定义字节码场景适用):如果你项目中有自定义的字节码生成逻辑,将原本反射调用ClassLoader.defineClass的逻辑,替换为Java 9+官方提供的MethodHandles.lookup().defineClass()API,完全符合模块系统的访问规范。
POJO类修改说明

不需要修改POJO类的原有逻辑,除非你的POJO用到了Java 16已经移除的废弃API,或者用到的序列化/反序列化框架(如旧版Fastjson、Gson)存在Java 16适配问题,后者升级对应框架版本即可,无需调整POJO的属性、get/set方法等原有内容。

内容的提问来源于stack exchange,提问作者user2304483

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 23:27:03