2010-03-10 58 views
2

如何在Java中執行前向聲明?Java:命名空間中類的前向聲明

我有兩個類,每個類都需要調用另一個方法,它們都駐留在不同的名稱空間中。例如...

package one; 

class A { 
    public void foo() { 
     B b = new B(); 
     b.bah(); 
    } 
} 

package two; 

class B { 
    public void bah() { 
     A a = new A(); 
     a.foo(); 
    } 
} 

UPDATE

在Eclipse中,當遇到這種代碼編譯時錯誤將會被拋出了「在構建路徑中檢測到循環。 ..「。

+0

我認爲這只是一個例子,你知道它會導致StackOverflowError? – DaveJohnston

+2

另請注意,這通常表明您在設計中遇到了一些問題。相關性通常應該只在一個方向上。 –

回答

3

只需導入它們。對於這些東西,Java比C++更聰明。

+0

在Java中,導入順序並不重要。循環引用可能沒有任何額外的代碼。 –

0

嗯,你導入類:

package one; 

import two.B; 

class A { 
    public void foo() { 
     new B().bah(); 
    } 
} 

,或者使用自己的全名:

package one; 

class A { 
    public void foo() { 
     new two.B().bah(); 
    } 
} 

但是,不用說,這將導致異常被拋出(至少在你張貼的片段...)。

+0

我的片段是廢話我知道,但它得到了點! ;) –

+0

@本,是的,我以爲你知道,但是想提一下就可以了。 –

0

給出這裏的註釋(即,你不需要做顯式的前向聲明,因爲編譯器可以應付)我已將Eclipse錯誤降級爲警告,並且將不得不忽略它。

要做到這一點去......

窗口>首選項>的Java>編譯器>建築>當這段代碼遇到一個編譯時錯誤將構建路徑問題>的通知依賴性

+0

當然,Eclipse會警告你,如果你運行這段代碼,你會得到一個StackOverflowError?或者,你的真實代碼是否有某種突破情況會阻止連續循環? – DaveJohnston

+0

這不是'真正的代碼',它只是描述我的問題的一些代碼的例子。 –

1

在Eclipse被拋出「在建造路徑中檢測到週期...」。

我認爲Eclipse在抱怨,因爲您的工作區中的不同Eclipse項目中的類之間存在循環依賴關係。 Eclipse希望能夠以線性順序構建項目。

如果你把相互依賴的類放到同一個項目中,Eclipse會很高興。