Java - EnumSet.add(枚举),抛出NullPointerException

时间:2012-04-05 16:06:59

标签: java enums nullpointerexception enumset

这是Java,跨平台,在运行Ubuntu Oneric的计算机上调试,OpenJDK作为我的运行时安装。

我有一个EnumSet用于检查我正在进行的游戏中的类内部。我有来自logcat的读数,来自我的构造函数中的debug aplenty:

Tile : passability being set...?
Exception in thread "Thread-1" javax.media.opengl.GLException:java.lang.NullPointerException
    ...
Caused by: java.lang.NullPointerException
    at net.darkglass.map.Tile.addPassability(Tile.java:144)
    ...

没有趣味。跟踪它,我的问题似乎完全是这一行:

public void addPassability(Passability type)
{
    this.passability.add(type);
}

我指的是那个功能的主体。它从构造函数中调用为:

this.addPassability(Passability.AIR);

发生NullPointerException时。在Passability Enum Type的主体中,我有

public enum Passability
{
    AIR, ALL, GROUND, NONE, SIGHT, SKILL, STRUCTURE, WATER;
}

就像字面意思一样,整个枚举保存包声明。声明了this.passability

private EnumSet <Passability> passability;

在类定义的开头,我认为add()方法是作为Java标准中EnumSet定义的一部分继承的。

我是自学成才,但我并不疯狂。要么我有错误,要么有更好的方法来做到这一点。那些有一些有用知识的人能够伸出援助之手吗?

1 个答案:

答案 0 :(得分:17)

所以你宣布了 passability变量,但是你没有表明它被赋予了除null的默认值以外的值。也许你的意思是:

private EnumSet<Passability> passability = EnumSet.noneOf(Passability.class);

EnumSet是一个对象,与其他任何对象一样 - 所以,除非您明确提供变量,否则它将具有默认值null,当您在其上调用add时,我会得到NullPointerException - 这正是这里发生的事情。