gpt4 book ai didi

java - 什么是非法反射访问?

转载 作者:IT老高 更新时间:2023-10-28 13:52:21 28 4
gpt4 key购买 nike

在 Java 9 中有很多关于非法反射访问的问题。

我发现了很多关于解决错误消息的讨论,但我很想知道什么是非法反射访问。

所以我的问题是:

什么定义了非法反射访问以及什么情况会触发警告?

我已经收集到它与 Java 9 中引入的封装原则有关,但我无法解释它们是如何联系在一起的、什么触发了警告以及在什么情况下。

最佳答案

除了了解模块及其各自包之间的访问之外。我相信它的症结在于 Module System#Relaxed-strong-encapsulation 我会挑选其中的相关部分来尝试回答问题。

What defines an illegal reflective access and what circumstancestrigger the warning?

为了帮助迁移到 Java-9,可以放松对模块的强封装。

  • 实现可以提供静态访问,即通过编译的字节码。

  • 可以提供一种调用其运行时系统的方法,其中一个或多个模块的一个或多个包对所有未命名的模块中的代码开放,即在类路径上编码.如果以这种方式调用运行时系统,并且如果这样做,反射 API 的某些调用会成功,否则它们会失败。

在这种情况下,您实际上最终进行了 反射访问,这是 “非法”,因为在纯模块化世界中,您不应该进行此类访问.

How it all hangs together and what triggers the warning in whatscenario?

这种封装的放松在运行时由一个新的启动器选项--illegal-access控制,在Java9中默认等于permitpermit 模式确保

The first reflective-access operation to any such package causes awarning to be issued, but no warnings are issued after that point.This single warning describes how to enable further warnings. Thiswarning cannot be suppressed.

模式可配置为值 debug(每次此类访问的消息和堆栈跟踪)、warn(每次此类访问的消息)和 deny (禁用此类操作)。


在应用程序上调试和修复的事情很少:-

  • 使用 --illegal-access=deny 运行它,以了解并避免在没有包含此类指令的模块声明的情况下将包从一个模块打开到另一个模块(opens) 或显式使用 --add-opens VM arg。
  • 可以使用带有 --jdk-internals 选项的 jdeps 工具识别从编译代码到 JDK 内部 API 的静态引用

The warning message issued when an illegal reflective-access operationis detected has the following form:

WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM

where:

$PERPETRATOR is the fully-qualified name of the type containing thecode that invoked the reflective operation in question plus the codesource (i.e., JAR-file path), if available, and

$VICTIM is a string that describes the member being accessed,including the fully-qualified name of the enclosing type

关于此类警告示例的问题:= JDK9: An illegal reflective access operation has occurred. org.python.core.PySystemState

最后也是重要的一点,在努力确保您不会面临此类警告并且 future 安全的同时,您需要做的就是确保您的模块不会进行那些非法的反射访问。 :)

关于java - 什么是非法反射访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50251798/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com