2011-04-26 49 views
0

说我有:class A取决于class B取决于class C取决于class AJava:编译内部相关类

这似乎不可能编译。我读过this post about disabling compile-time depedency-checking,但我所有的类都在类路径中,定义良好等。唯一的问题是它们相互依赖。

有没有办法编写这样一个应用程序,可以顺利编译?

+0

这不一定和答案,但我不得不问 - 你是怎么开始写代码的?你先写了A类吗?或B类?或C类?鸡蛋? :) – Liv 2011-04-26 16:13:13

+0

当你说“似乎不可能编译”:你试过了吗?它应该只是工作。 – 2011-04-26 16:13:40

+0

好吧,'javac * .java'出错了。 – 2011-04-26 16:15:11

回答

6

在我们的遗留代码库中,我们确实有几个这样的依赖循环,并且它们的编译顺利。

这并不是说有循环依赖关系是好事 - 相反。我打算最终摆脱它们来清理我们的建筑。尽管如此,与此同时,代码仍然编译和工作。

+0

那你怎么写呢?有没有提到我做错了的类的方法? – 2011-04-26 16:14:10

+0

@passcod,类A具有类型B的属性,B类型为C的属性,而C具有类型A的属性。你有什么样的依赖关系? – 2011-04-26 16:15:34

0

您可以像这样获得这种循环依赖性,因为Java知道要从名称中找到代码来读取哪些文件。即它立即编译它们。如果你一次编译一个,你只会遇到问题。

1

这里重要的是编译器必须能够同时编译所有的类。如果是这样的话,应该没有问题。当然,你应该照顾通常的目录布局问题。

如果软件包无法一起编译,它会变得更加复杂 - 您可能必须先创建虚拟实现(不依赖于其他类),然后(如果您拥有合适的类)替换它们。但我无法想象一个不能将它们一起编译的原因。