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

Zhe*_*lov 11 java java-platform-module-system java-9

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

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

    exports java.rmi.activation;
    exports com.sun.rmi.rmid to java.base; // <-- cycle
    ...
}
Run Code Online (Sandbox Code Playgroud)

那么,java.rmi和之间存在循环依赖关系java.base,对吗?平台模块之间是否允许循环?

Nic*_*lai 10

模块系统禁止用requires子句静态声明循环.这适用于平台和应用程序模块,您提供的示例不违反该规则.

但是,要求子句只是模块图中可读性边缘的一个来源.其他的是命令行标志,反射,requires transitive我相信还有更多.添加所有这些可能会导致模块图中的循环,并且不会被禁止.

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