NullPtrException Java在Map中使用枚举

App*_*Pie 0 java

我正在尝试另一种方法来做一些我已经拥有的代码,我发现它不够优雅,我遇到了这个例外.我真的不明白发生了什么,我还是Java的新手.

如果有很多代码,我很抱歉,但我不认为我可以削减更多.例外是在第一行提出的Initialize().

这是确切的错误消息:

在simulationia.SimulationIA.main(SimulationIA.java:21)的simulationia.CritterInfo.Initialize(Critter.java:35)中的线程"main"java.lang.NullPointerException中的异常

第35行是第一行Initialize().SimulationIA的第21行是调用Initialize().

// Critter.java
class CritterInfo { 
    static private Map<Object, String> enum_desc;

    public enum CRITTER_TYPE { CT_HERBIVORE, CT_CARNIVORE }
    public enum CRITTER_STATE { CS_FULL, CS_HUNGRY, CS_STARVING, CS_DEAD }

    /* ... */

    static void Initialize() {
        enum_desc.put((Object)CRITTER_TYPE.CT_HERBIVORE,    "Herbivore");
        enum_desc.put((Object)CRITTER_TYPE.CT_CARNIVORE,    "Carnivore");
        enum_desc.put((Object)CRITTER_STATE.CS_FULL,        "Full");
        enum_desc.put((Object)CRITTER_STATE.CS_HUNGRY,      "Hungry");
        enum_desc.put((Object)CRITTER_STATE.CS_STARVING,    "Starving");
        enum_desc.put((Object)CRITTER_STATE.CS_DEAD,        "Dead");
    }

    /* ... */
}   
Run Code Online (Sandbox Code Playgroud)

另一个档案......

// SimulationIA.java
public class SimulationIA {
    public static void main(String[] args) {
        /* ... */

        CritterInfo.Initialize();

        /* ... */
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上我要做的是让一个单独的地图保存所有枚举值而不关心它的类型并且必须检查instanceof.也许这是不可行的.

编辑:我认为这可能与我不使用实际对象,只有枚举值因此它抱怨空指针的事实有关.是对的吗 ?我该怎么回事呢?

Jer*_*man 5

你永远不会创建Map,因此put被调用null.

你应该做的事情(例如):

static private Map<Object, String> enum_desc = new HashMap<Object, String>();
Run Code Online (Sandbox Code Playgroud)