我们在数据库中使用代码值,在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的构造函数中更新地图。根据用例的不同,这种分离可能是有益的-但是,除非有明显的好处,否则我将采用您的方法并将所有内容封装在枚举本身内。

09-27 15:20