首页 >Java >java教程 >什么是 Java 9 中的非法反射访问以及如何修复它?

什么是 Java 9 中的非法反射访问以及如何修复它?

DDD
DDD原创
2024-12-05 03:07:13219浏览

What is Illegal Reflective Access in Java 9 and How Can I Fix It?

Java 9 中的非法反射访问

在 Java 9 中引入模块化之后,开发人员遇到了与非法反射访问相关的问题。要完全掌握这个概念,首先要了解模块系统的“宽松强封装”。

非法反射访问的定义

非法反射访问是指以不符合模块化设计原则的方式执行反射操作的情况。它违反了模块及其包之间建立的封装屏障。

触发警告的情况

非法反射访问的警告在以下情况下触发:

  • 模块在不使用正确的模块声明或 VM 参数的情况下访问另一个模块的内部包(例如, --add-opens)。
  • 编译后的代码访问内部 JDK API。

胶囊原则的放宽

Java 9 引入了 - -illegal-access 启动器选项,默认设置为允许以帮助迁移。在允许模式下:

  • 对包的第一个非法反射访问操作会生成警告。
  • 后续操作不会触发警告。

配置模式

--illegal-access选项可以配置不同的模式:

  • debug:为每个非法访问提供警告和堆栈跟踪。
  • warn:为每个非法访问发出警告。
  • deny:禁止非法访问操作。

如何识别和修复

为了避免非法反射访问,开发人员可以:

  • 使用 --illegal-access=deny 运行应用程序以检测未经授权的访问。
  • 识别使用 jdeps 工具对 JDK API 进行静态引用(使用 --jdk-internals

警告消息

非法反射访问操作会导致以下格式的警告:

WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM

其中:

  • $PERPETRATOR:调用反射的类型操作
  • $VICTIM:正在访问成员

确保未来兼容性

为了确保未来兼容性,消除非法反射访问和确保模块遵循正确的封装原则。

以上是什么是 Java 9 中的非法反射访问以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn