首页 > Java > java教程 > 如何解决Java 9的InaccessibleObjectException?

如何解决Java 9的InaccessibleObjectException?

Barbara Streisand
发布: 2024-12-27 02:49:14
原创
557 人浏览过

How Can I Resolve Java 9's InaccessibleObjectException?

解决 Java 9 中的 InaccessibleObjectException

InaccessibleObjectException 在 Java 9 的各种场景中出现,通常涉及使用第三方库或框架反射与 Java 开发工具包 (JDK) 或应用程序代码进行交互。以下是对该问题以及如何规避该问题的解释。

原因和影响

Java 9 引入了模块系统,强制执行更严格的封装约束。除非满足特定标准,否则对元素(例如类、方法)的访问受到限制。这些限制扩展到反射操作,例如 setAccessible(),它尝试绕过访问限制。

异常消息分解

异常消息提供了重要信息:

Unable to make {member} accessible: module {A} does not "opens {package}" to {B}
登录后复制
  • {A}:无法访问的模块(例如, java.base)
  • {member}:指定的不可访问元素(例如,defineClass方法)
  • {package}:不可访问适用于此包中的元素(例如,java.lang)
  • {B}:请求模块(通常是未命名的模块,例如@1941a8ff)

解决策略

根据不同的场景,不同的策略可以解决问题。主要有两种情况:

情况 1:反射调用 JDK

  • 由于 JDK 不变性,修复涉及 JVM 命令行标志。
  • 使用 --add-opens 和语法 {A}/{package}={B} 打开特定的包反射。

案例 2:对应用程序代码的反射

  • 可以修改不可访问的模块以打开其内部。
  • 在模块描述符中应用导出或打开指令来配置可访问性限制。
  • 选项包括将特定包导出或打开到请求的模块或所有代码。

其他注意事项

  • 在某些情况下,可能需要应用多个--add-opens 标志。
  • 作为最后的手段,--permit-illegal-access 标志(仅在Java 9) 可用于启用跨模块的反射访问。但是,由于安全隐患,这应该被视为临时解决方案。

以上是如何解决Java 9的InaccessibleObjectException?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板