我们在数据库中使用代码值,在 Java 中使用枚举。在查询数据库的时候,我们需要取一个code值,得到一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
这正是我解决该特定问题所采取的方法。从设计的角度来看,我认为它没有任何问题,它直观、高效,并且(据我所知)完全做到了它应该做的事情。
我能想到的唯一其他明智的方法是将地图放在一个单独的类中,然后调用该类以从SomeEnum的构造函数更新地图。根据用例,这种分离可能是有益的 - 但除非它有硬性好处,否则我会采用您的方法并将所有内容封装在枚举本身中。