我正在尝试另一种方法来处理我已经拥有的一些代码,但我发现这些代码并不优雅,并且遇到了这个异常。我真的不明白发生了什么,我对 Java 还是很陌生。
如果代码有点多,我很抱歉,但我认为我不能削减更多。异常在 的第一行引发Initialize()
。
这是确切的错误消息:
在simulationia.CritterInfo.Initialize(Critter.java:35) 在simulationia.SimulationIA.main(SimulationIA.java:21) 的线程“主” 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");
}
/* ... */
}
另一个文件...
// SimulationIA.java
public class SimulationIA {
public static void main(String[] args) {
/* ... */
CritterInfo.Initialize();
/* ... */
}
}
基本上我想要做的是有一个单一的地图来保存所有枚举值,而不关心它的类型并且必须检查instanceof
. 也许这只是不可行。
编辑:我认为这可能与我不使用实际对象的事实有关,只使用枚举的值,因此它抱怨空指针。那正确吗 ?我将如何解决这个问题?