6

我正在尝试使用适合 Java 9 模块系统的最佳实践,这样我就可以减少工作量来获得好处(而且我们现在的系统确实可以从一些模块化中受益)。

在当前标准下是否允许模块 A 导出包 com.example.foo 以及模块 B 导出包 com.example.foo?

作为一个相关的问题,如果相关的话,是这一点是否真正得到解决,或者它是否仍然不是最终的。

4

1 回答 1

8

根据最新的模块系统状态,模块系统确保“每个模块最多读取一个定义给定包的模块,并且定义同名包的模块不会相互干扰”。并且:“当模块中的代码引用包中的类型时,则保证该包是在该模块中定义的,或者恰好在该模块读取的模块之一中定义。”

这意味着两个不同的模块可以导出相同的包,如果 - 在构建时和运行时 - 没有模块同时依赖于 A 和 B 并且如果 A 和 B 不相互依赖。理论上,您可以有两个模块导出相同的包,并一次将它们与另一个依赖模块一起使用。

我还建议,正如已经建议的那样,最好的做法是让一个包由单个模块而不是两个模块导出。

于 2016-12-06T00:47:52.760 回答