对象实例化顺序和空指针异常



我正在尝试实例化两个类,如下所示:

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

我的问题是,我的Ball类一直抛出一个空指针异常,因为我正在传递尚未实例化的ai。

颠倒这些对象的创建顺序只会让我的AiPaddle类抛出错误,因为它需要球类。

解决这样的问题的最佳方法是什么?我通过在我的ball类中创建一个名为addAi的新方法来修复它,该方法使用ai,所以我有了这个:

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

但我相信有更好的方法可以做到这一点。

更好的方法是拥有第三个"master"对象,它知道Ball和AiPaddle。将球和ai都实例化,然后将它们传递给"大师"。

正如Lucas Knuth所评论的,您有一个设计问题。您找到的解决方案是一个很好的解决方案,但不要忘记惯例:您正在设置Ball的一个属性,所以您应该调用方法setAi(),而不是addAi()。

下次,当你设计你的类时,尽量避免这个问题。

最新更新