java - 平台模块之间是否允许循环?

标签 java java-9 java-platform-module-system

这是 java.rmi 模块的模块声明:

module java.rmi {
    requires java.base;
    requires java.logging;

    exports java.rmi.activation;
    exports com.sun.rmi.rmid to java.base; // <-- cycle
    ...
}

所以,java.rmijava.base 之间存在循环依赖,对吗? platform modules 之间是否允许循环?

最佳答案

模块系统禁止使用requires 子句静态声明循环。这对于平台和应用程序模块来说是正确的,您给出的示例没有违反该规则。

不过,Requires 子句只是模块图中可读性优势的一个来源。其他还有命令行标志、反射、需要传递,我相信还有更多。添加所有这些可能会导致模块图中出现循环,但这是不被禁止的。

在您的具体示例中,循环仅在 java.base 读取 java.rmi 时创建,如果它在 com 中的类上使用反射,则可能会发生这种情况。 sun.rmi.rmid.

关于java - 平台模块之间是否允许循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44104714/

相关文章:

java-9 - 如何使用 JLink 命令为 JDK9 应用程序创建跨平台可执行文件

java - 通过反射绕过 Java 模块化

java - 为什么 Java 自动模块不包含导出部分

java - Selenium ImeActivationFailedException 和 ImeNotAvailableException

java - 如何计算以下代码片段的复杂性?

java - 覆盖 Struts 2 消息

java - 什么是 Http2 中的 GoAway 框架以及它如何链接到重定向?

java - 为什么 java 9 用户应该切换到 java 10?

intellij-idea - IntelliJ IDEA 项目模块与 Java 9 模块的概念不同吗?

java - 在测试中用 ExecutorService 替换 ManagedExecutorService