我们在数据库中使用代码值,在Java中使用枚举。查询数据库时,我们需要获取一个代码值并获取一个Enum实例。
拥有HashMap避免迭代是否为时过早?你会怎么做?有更容易的方法吗?
public enum SomeEnum
{
TYPE_A(2000), TYPE_B(2001);
private int codeValue;
private static HashMap<Integer, SomeEnum> codeValueMap = new HashMap<Integer, SomeEnum>(2);
static
{
for (SomeEnum type : SomeEnum.values())
{
codeValueMap.put(type.codeValue, type);
}
}
//constructor and getCodeValue left out
public static SomeEnum getInstanceFromCodeValue(int codeValue)
{
return codeValueMap.get(codeValue);
}
}
最佳答案
这正是我要解决该特定问题的方法。从设计的角度来看,我没有发现任何问题,它直观,高效并且(据我所知)完全按照应有的方式工作。
我能想到的唯一其他明智的方法是将地图放在单独的类中,然后调用该类从SomeEnum
的构造函数中更新地图。根据用例的不同,这种分离可能是有益的-但是,除非有明显的好处,否则我将采用您的方法并将所有内容封装在枚举本身内。