說我有:class A
取決於class B
取決於class C
取決於class A
。Java:編譯內部相關類
這似乎不可能編譯。我讀過this post about disabling compile-time depedency-checking,但我所有的類都在類路徑中,定義良好等。唯一的問題是它們相互依賴。
有沒有辦法編寫這樣一個應用程序,可以順利編譯?
說我有:class A
取決於class B
取決於class C
取決於class A
。Java:編譯內部相關類
這似乎不可能編譯。我讀過this post about disabling compile-time depedency-checking,但我所有的類都在類路徑中,定義良好等。唯一的問題是它們相互依賴。
有沒有辦法編寫這樣一個應用程序,可以順利編譯?
在我們的遺留代碼庫中,我們確實有幾個這樣的依賴循環,並且它們的編譯順利。
這並不是說有循環依賴關係是好事 - 相反。我打算最終擺脫它們來清理我們的建築。儘管如此,與此同時,代碼仍然編譯和工作。
那你怎麼寫呢?有沒有提到我做錯了的類的方法? – 2011-04-26 16:14:10
@passcod,類A具有類型B的屬性,B類型爲C的屬性,而C具有類型A的屬性。你有什麼樣的依賴關係? – 2011-04-26 16:15:34
您可以像這樣獲得這種循環依賴性,因爲Java知道要從名稱中找到代碼來讀取哪些文件。即它立即編譯它們。如果你一次編譯一個,你只會遇到問題。
這裏重要的是編譯器必須能夠同時編譯所有的類。如果是這樣的話,應該沒有問題。當然,你應該照顧通常的目錄佈局問題。
如果軟件包無法一起編譯,它會變得更加複雜 - 您可能必須先創建虛擬實現(不依賴於其他類),然後(如果您擁有合適的類)替換它們。但我無法想象一個不能將它們一起編譯的原因。
這不一定和答案,但我不得不問 - 你是怎麼開始寫代碼的?你先寫了A類嗎?或B類?或C類?雞蛋? :) – Liv 2011-04-26 16:13:13
當你說「似乎不可能編譯」:你試過了嗎?它應該只是工作。 – 2011-04-26 16:13:40
好吧,'javac * .java'出錯了。 – 2011-04-26 16:15:11