假设我有:
class A
取决于class B
取决于class C
取决于class A
。
似乎无法编译。我已经读过这篇关于禁用编译时依赖性检查的文章,但我的所有类都在类路径内,定义良好等。唯一的问题是它们相互依赖。
有没有办法编写这样一个可以顺利编译的应用程序?
我们的遗留代码库中确实有几个这样的依赖循环,并且它们确实可以顺利编译。
这并不是说拥有循环依赖是件好事——恰恰相反。我打算最终摆脱它们以清理我们的架构。尽管如此,与此同时,代码仍然可以编译并运行。
这里重要的是编译器必须能够同时编译所有的类。如果是这样的话,应该没有什么问题。当然,您应该注意常见的目录布局问题。
如果包不能一起编译,它会变得更加复杂 - 您可能必须首先创建虚拟实现(不依赖于其他类),然后(当您有正确的类时)替换它们。但我真的无法想象无法将它们编译在一起的原因。
您可以像这样拥有这种循环依赖关系,因为 Java 知道要读取哪些文件以从名称中查找代码。即它一次编译它们。 如果您尝试一次编译一个,您只会遇到问题。