2012-11-02 63 views
1

所以,我有我的主類,它運行時調用private Secondary secondary = new Secondary();。在輔助班,頂部有代碼private Main main = new Main();創建對象而不會導致堆棧溢出錯誤?

我將如何使用Secondary類中的所有方法和變量,反之亦然,而不會導致堆棧溢出錯誤?

注:他們不是在構造函數中

+0

你的問題沒有多大意義:堆棧溢出錯誤是由調用過多的嵌套方法造成的,而不是通過創建對象。 – Wyzard

+2

@Wyzard:它非常有意義 - 初始化一個'Secondary'需要初始化一個新的'Main',它需要初始化一個新的'Secondary'等。它是遞歸構造,而不是遞歸方法調用。 –

+0

@JonSkeet,只有在調用是在構造函數中,問題沒有指定,儘管它似乎是一個似是而非的解釋。我假定第一句是指代* * static *'main()'方法中的代碼。 – Wyzard

回答

2

主類是創建一個輔助實例,這是創建一個主實例......,這是導致堆棧溢出錯誤。

我想你只是希望對象互相引用,所以不要在構造函數中創建其他類的新實例。將引用聲明爲實例變量,並使用setter方法來存儲對其他類型對象的現有引用。

0

您可以使用builder pattern來處理實例字段(通過setter)的安全(非遞歸)初始化。