NPE在构造函数和超类上

时间:2014-10-22 11:58:57

标签: kotlin

我有以下代码:

public class CurrentPlayer(override val game: PewGame, spriteSheet: String) : Player(game, spriteSheet)

层次结构如下: CurrentPlayer - > class Player - > trait MovingEntity - >特质实体。

特质'实体'有一场野外比赛:PewGame'。 Player的构造函数如下所示:

public open class Player(override val game: PewGame, spriteSheet: String) : MovingEntity, InputAdapter()

在播放器的构造函数中,如果你可以在kotlin中调用它,我就有这个:

this.sprite = CharacterSpriteSheet(Utilities.createTextureFromFile(spriteSheet), this.game.getSpriteBatch(), 0.25f)

问题是,' this.game'是null,因此' this.game.getSpriteBatch()'抛出NPE。我无法以更好的方式解释这一点,所以任何帮助都会受到赞赏。更准确地说,在使用调试器之后:

我可以在Player类中看到gamethisgame不为空,但由于某些莫名其妙的原因,this.game为空。

感谢您的帮助!

编辑:我忘了提到这个问题仅在我实例化CurrentPlayer时出现,并且在我实例化Player时没有发生。

1 个答案:

答案 0 :(得分:3)

问题是您将相同的数据存储在两个字段中:您在game中覆盖Player,然后在CurrentPlayer中覆盖,这会使相同的数据存储两次。顺便提一下,它使game属性的getter访问CurrentPlayer中的未初始化字段,而不是Player中的初始化字段。

要解决此问题,请从override val声明中删除CurrentPlayer

public class CurrentPlayer(game: PewGame, spriteSheet: String) : Player(game, spriteSheet)