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.