平台模块之间是否允许循环?
这是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.rmi
和java.base
之间存在循环依赖,对吗? 平台模块之间是否允许循环?
模块系统禁止使用requires
子句静态声明循环。 这适用于平台和应用程序模块,您提供的示例不违反该规则。
但是,要求子句只是模块图中可读性边缘的一个来源。 其他是命令行标志,reflection, requires transitive
,我相信还有更多。 添加所有这些可能会导致模块图中的循环,并且不会被禁止。
在您的具体示例中,只有在java.base读取java.rmi时才会创建循环,如果它在com.sun.rmi.rmid
对类使用reflection,则可能会发生这种情况。