从代码值中查找 Java 枚举类型?

And*_*ndy 5 java enums

我们在数据库中使用代码值,在 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)

Mic*_*rry 4

这正是我解决该特定问题所采取的方法。从设计的角度来看,我认为它没有任何问题,它直观、高效,并且(据我所知)完全做到了它应该做的事情。

我能想到的唯一其他明智的方法是将地图放在一个单独的类中,然后调用该类以从SomeEnum的构造函数更新地图。根据用例,这种分离可能是有益的 - 但除非它有硬性好处,否则我会采用您的方法并将所有内容封装在枚举本身中。