私はすでに持っているコードを実行する別の方法を試していましたが、それは私が不法であると感じ、この例外に遭遇しました。私は何が起こっているのか本当に理解していません、私はまだJavaに非常に慣れていません。
コードが少し多ければ申し訳ありませんが、それ以上カットすることはできないと思います。例外は、の最初の行で発生しInitialize()
ます。
正確なエラーメッセージは次のとおりです。
スレッド"main"の例外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
です。多分これは実行不可能です。
編集:これは、実際のオブジェクトを使用せず、列挙型の値のみを使用するため、nullポインターについて不平を言うという事実に関係している可能性があると思います。そうですか?これをどのように回避しますか?