2013-02-24 59 views
0

我試圖實例,像這樣兩類:對象實例化順序和空指針異常

ball = new Ball(gc, board, player, ai, score);  
ai = new AiPaddle(gc, ball); 

我的問題是,我的球類不斷拋出一個空指針異常,因爲我傳遞AI,其中尚未實例化。

顛倒這些對象的創建順序只會讓我的AiPaddle類拋出錯誤,因爲它需要球類。

解決此類問題的最佳方法是什麼?我在我的叫ADDAI球類,它採用人工智能使一個新的方法固定它,而不是讓我有這樣的:

ball = new Ball(gc, board, player, score);  
ai = new AiPaddle(gc, ball);  
ball.addAi(ai); 

但我敢肯定有一個更好的方法來做到這一點。

+10

你有一個依賴問題,這是由不良設計引起的。重新思考這兩個階級的結構。 – 2013-02-24 11:24:55

+0

如果你仔細觀察他們之間的關係,你可以很好地設計你的課程。他們可能有「有」或「是一種」的關係。如果你確定它們,那麼你將設計更好的類,你也將能夠識別和解決任何依賴性問題。 – ankurtr 2013-02-24 11:35:24

回答

1

更好的路要走有一個知道Ball和AiPaddle的第三個「主」對象。實例化ball和ai,然後將它們傳遞給「主」。

0

由Lucas Knuth評論,您有設計問題。你找到的解決方案是一個很好的解決方案,但不要忘記慣例:你正在設置Ball的屬性,所以你應該調用方法setAi(),而不是addAi()。

下一次,當您設計類時,請嘗試防止此問題。