gpt4 book ai didi

java - Java 在 Map 中使用 enum 出现 NullPtr 异常

转载 作者:行者123 更新时间:2023-12-01 06:55:38 24 4
gpt4 key购买 nike

我正在尝试用另一种方法来执行一些我已经拥有的代码,但我发现这些代码不优雅,并且遇到了这个异常。我不太明白发生了什么,我对 Java 还很陌生。

如果代码有点多,我很抱歉,但我不认为我可以削减更多。异常在 Initialize() 的第一行引发。

这是确切的错误消息:

Exception in thread "main" java.lang.NullPointerException at simulationia.CritterInfo.Initialize(Critter.java:35) at simulationia.SimulationIA.main(SimulationIA.java:21)

第 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。也许这是不可行的。

编辑:我认为这可能与以下事实有关:我不使用实际对象,仅使用枚举的值,因此它提示空指针。是对的吗 ?我该如何解决这个问题?

最佳答案

您从未创建过 map ,因此在 null 上调用 put

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

static private Map<Object, String> enum_desc = new HashMap<Object, String>();

关于java - Java 在 Map 中使用 enum 出现 NullPtr 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com