平台模块之间是否允许循环?
Are cycles allowed between platform modules?
这是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
之间存在循环依赖,对吧? platform modules 之间是否允许循环?
模块系统禁止使用 requires
子句静态声明循环。这对于平台和应用程序模块来说是正确的,您给出的示例没有违反该规则。
不过,Requires 子句只是模块图中可读性优势的来源之一。其他的是命令行标志、反射、requires transitive
,我相信还有更多。添加所有这些可能会导致模块图中出现循环,但这是不被禁止的。
在您的具体示例中,循环仅创建一次 java.base 读取 java.rmi,这可能会发生如果它在 com.sun.rmi.rmid
.
中对 类 使用反射
这是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
之间存在循环依赖,对吧? platform modules 之间是否允许循环?
模块系统禁止使用 requires
子句静态声明循环。这对于平台和应用程序模块来说是正确的,您给出的示例没有违反该规则。
不过,Requires 子句只是模块图中可读性优势的来源之一。其他的是命令行标志、反射、requires transitive
,我相信还有更多。添加所有这些可能会导致模块图中出现循环,但这是不被禁止的。
在您的具体示例中,循环仅创建一次 java.base 读取 java.rmi,这可能会发生如果它在 com.sun.rmi.rmid
.