考慮下面的代碼,Java 1.5 Enum:爲什麼我不能在1.5枚枚舉中使用'findBy'?
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public enum SearchDataTypes {
FIELD_DATATYPE_TEXT(String.class,"_t"),
FIELD_DATATYPE_INT(Integer.class,"_i"),
FIELD_DATATYPE_LONG(Long.class,"_l"),
FIELD_DATATYPE_FLOAT(Float.class,"_f"),
FIELD_DATATYPE_DOUBLE(Double.class, "_d"),
FIELD_DATATYPE_DATE(Date.class,"_dt");
SearchDataTypes(final Class<?> clazz, final String affix) {
this.affix = affix;
this.clazz = clazz;
getAffixMap().put(affix, this);
getClassMap().put(clazz, this);
}
public String getFieldName(String objectFieldName) {
return objectFieldName+affix;
}
public String getObjectFieldName(String FieldName) {
int len = FieldName.length();
len -= this.affix.length();
return FieldName.substring(0, len);
}
public static SearchDataTypes findByAffix(String affix) {
SearchDataTypes obj = getAffixMap().get(affix);
assert obj != null;
return obj;
}
public static SearchDataTypes findByClass(Class<?> clazz) {
SearchDataTypes obj = getClassMap().get(clazz);
assert obj != null;
return obj;
}
private String affix;
private Class<?> clazz;
private static Map<Class<?>, SearchDataTypes> classMap = new HashMap<Class<?>, SearchDataTypes>();
private static Map<String, SearchDataTypes> affixMap = new HashMap<String, SearchDataTypes>();
private static Map<Class<?>, SearchDataTypes> getClassMap() { return classMap; }
private static Map<String, SearchDataTypes> getAffixMap() { return affixMap; }
}
枚舉類是沒有得到實例化(使用枚舉拋出NoClassDefFoundError的),因爲有初始化期間NullPointerException異常。我假設JVM認爲map是null。但爲什麼??
我還可以爲枚舉實現取景器嗎?我更喜歡不使用java.util.EnumMap類,主要是因爲我想更好地理解枚舉的內部工作。
謝謝
什麼是NPE的實際回溯?你需要調試它。 – bmargulies
如果我能看到NPE,我不會發表這個。 NPE沒有被JVM打印。 – jabawaba
我不認爲枚舉支持靜態地圖字段。但是,我必須要做一個替代方案。 – jabawaba