2014-10-22 54 views
0

我有以下代碼:NPE在構造函數和超

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

的層次結構如下所示: CurrentPlayer - >類播放器 - >特徵MovingEntity - >特質實體。

特徵'實體'有一個字段'VAL遊戲:PewGame'。 對球員的構造是這樣的:

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

在播放器的構造函數,如果你可以調用它,在科特林,我有這樣的:

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

問題是,「this.game」爲null,因此'this.game.getSpriteBatch()'拋出一個NPE。我無法以更好的方式解釋這一點,所以任何幫助表示讚賞。更確切地說,使用調試器後:

我可以在Player類中看到gamethisgame不爲空,但this.game由於某些不可解釋的原因而爲空。

感謝您的幫助!

編輯:我忘了提及問題只存在於我實例化CurrentPlayer時,並且在實例化Player時不會發生。

+0

可以粘貼所有的代碼,包括父類 – 2014-10-22 21:02:34

回答

3

問題是,您在兩個字段中存儲相同的數據:您在Player中覆蓋game,然後在CurrentPlayer中重寫,這會使相同的數據存儲兩次。順便說一下,它使得game屬性的獲取者訪問CurrentPlayer中的未初始化字段,而不是Player中的初始化字段。

爲了解決這個問題,剛剛從CurrentPlayer聲明刪除override val

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

啊哈,謝謝。還有一些要了解這一點(: – zhiayang 2014-10-23 06:45:57