0

次のように2つのクラスをインスタンス化しようとしています:

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

私の問題は、まだインスタンス化されていない ai を渡しているため、Ball クラスが Null Pointer Exception をスローし続けることです。

これらのオブジェクトが作成される順序を逆にすると、ボール クラスが必要になるため、代わりに AiPaddle クラスがエラーをスローします。

このような問題を解決する最善の方法は何ですか? 代わりに ai を取る addAi というボール クラスに新しいメソッドを作成して修正したので、次のようにしました。

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

しかし、これを行うにはもっと良い方法があると確信しています。

4

2 に答える 2

1

より良い方法は、ボールと AiPaddle について知っている 3 番目の「マスター」オブジェクトを用意することです。ボールと ai の両方をインスタンス化し、それらを「マスター」に渡します。

于 2013-02-24T11:26:26.127 に答える
0

Lucas Knuth のコメントによると、設計上の問題があります。あなたが見つけた解決策は良いものですが、慣習を忘れないでください: Ball のプロパティを設定しているので、addAi() ではなく setAi() メソッドを呼び出す必要があります。

次回、クラスを設計するときは、この問題を回避するようにしてください。

于 2013-02-24T11:36:35.443 に答える