2011-04-26 48 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

這裏重要的是編譯器必須能夠同時編譯所有的類。如果是這樣的話,應該沒有問題。當然,你應該照顧通常的目錄佈局問題。

如果軟件包無法一起編譯,它會變得更加複雜 - 您可能必須先創建虛擬實現(不依賴於其他類),然後(如果您擁有合適的類)替換它們。但我無法想象一個不能將它們一起編譯的原因。