[英]How to map JAVA enum to Postgresql Enum using Hibernate/JPA?
[英]NullPtrException Java using enum in Map
我正在嘗試一種替代的方式來處理已有的一些代碼,這些代碼我覺得很模糊並且遇到了這個異常。 我不太了解發生了什么,對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");
}
/* ... */
}
另一個文件...
// 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的枚舉:
public enum Enum {
DOG("Dogs are cool"),
CAT("Dogs are better"),
GOAT("Free milk");
private final String desc;
private Enum(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
}
讓我們從基本...
public enum CRITTER_TYPE { CT_HERBIVORE, CT_CARNIVORE }
public enum CRITTER_STATE { CS_FULL, CS_HUNGRY, CS_STARVING, CS_DEAD }
public static void main(String[] args) {
for (CRITTER_TYPE type : CRITTER_TYPE.values()) {
System.out.println(type);
}
}
將輸出
CT_HERBIVORE
CT_CARNIVORE
因此,我們知道,一個enum
的意志輸出的“名稱” enum
通過它toString
方法。
知道這很高興,因為您可以使enum
描述性。
如果這還不夠好(不支持空格,或者您想要更友好的東西),則可以執行以下操作:
public enum CRITTER_TYPE {
CT_HERBIVORE("Herbivore"),
CT_CARNIVORE("Carnivore");
private String description;
private CRITTER_TYPE(String desc) {
description = desc;
}
public String getDescription() {
return description;
}
}
public static void main(String[] args) {
for (CRITTER_TYPE type : CRITTER_TYPE.values()) {
System.out.println(type.getDescription());
}
}
哪個輸出
Herbivore
Carnivore
Java中的enum
是一種特殊的對象類型,您可能希望通讀Enum Types以獲取更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.