Учитывая приведенный ниже код,
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; }
}
Класс enum не создается (с использованием метода enum throws NoClassDefFoundError), поскольку во время инициализации существует исключение NullPointerException.Я предполагаю, что JVM думает, что любая карта является нулевой.Но почему ??
Как еще можно реализовать поиск для перечислений?Я предпочитаю не использовать класс java.util.EnumMap главным образом потому, что хочу лучше понять внутреннюю работу перечислений.
спасибо