gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:02:21 25 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/59616379/

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