gpt4 book ai didi

java - 循环模块依赖在 Java 9 中是否可行?

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:03 24 4
gpt4 key购买 nike

在 Java 9 中,是否允许使用循环模块?如果没有,原因是什么?

module com.foo.bar {
requires com.foo.baz;
exports com.foo.bar.fizz;
}

module com.foo.baz {
requires com.foo.bar;
exports com.foo.baz.buzz;
}

最佳答案

没有。

文档

有趣的是 State of the Module System 都不是也不是 Jigsaw Quick Start Guide解决这个问题。一个来源(由 Andy 找到)是 Alex Buckley 的 JavaOne 演讲(参见他的解释 here)。最近的一个是 list of open issues ,其中明确提到 cyclic dependencies :

The current draft disallows cycles when the module graph is initially resolved at compile time, link time, and run time. Cycles can arise later on at run time if readability edges are added for automatic modules, or via reflection. [...] This constraint is not, however, a documented requirement [...].

理由

循环依赖是不好的,mkay。 ;)

当两个实体(方法、类、模块、项目……)协作但没有充分解耦时,它们就会出现。对于用户和维护者来说,这种耦合意味着他们不能在不考虑另一个的情况下使用或改进一个。但这正是模块化试图实现的好处。

来自上面链接的问题列表:

The rationale for disallowing cycles during resolution is that it makes the module graph easier to reason about, it simplifies the module system itself, and that, philosophically, any modules involved in a cycle are logically one module anyway, so they should be defined as such in the first place.

实验

我创造了一点 demo project on GitHub包含两个循环(:二 -> 一 -> 二;:三 -> 二 -> 一 -> 三)。尝试 multi-module compilation如快速入门指南所示,结果如下:

./compile.sh
> creating clean directories
> compiling and packaging cycle "pair"
src/org.codefx.demo.cyclic.pair.one/module-info.java:2: error: cyclic dependence involving org.codefx.demo.cyclic.pair.two
requires org.codefx.demo.cyclic.pair.two;
^
1 error
> compiling and packaging cycle "triple"
src/org.codefx.demo.cyclic.triple.three/module-info.java:2: error: cyclic dependence involving org.codefx.demo.cyclic.triple.two
requires org.codefx.demo.cyclic.triple.two;
^
1 error

因此您甚至无法编译模块,更不用说在配置中使用它们了。

关于java - 循环模块依赖在 Java 9 中是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35688995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com