【问题标题】:NPE on constructor and superclass构造函数和超类上的 NPE
【发布时间】:2014-10-23 10:36:13
【问题描述】:

我有以下代码:

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

层次结构如下: CurrentPlayer -> class Player -> trait MovingEntity -> trait Entity。

特征“Entity”有一个字段“val game: PewGame”。 Player 的构造函数如下所示:

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

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

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

问题是,“this.game”为空,因此“this.game.getSpriteBatch()”会抛出 NPE。我无法以更好的方式解释这一点,因此感谢您提供任何帮助。更准确地说,在使用调试器之后:

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

感谢您的帮助!

编辑:我忘了提到这个问题只在我实例化 CurrentPlayer 时出现,而在我实例化 Player 时不会发生。

【问题讨论】:

  • 你能粘贴你所有的代码,包括父类

标签: kotlin


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    相关资源
    最近更新 更多