将int值与enum相关联并获取相应的int值

时间:2015-09-22 14:16:17

标签: java enums

我有一个枚举,我有一个与每个相关联的整数值。我的一个函数接受枚举。在函数体中,我想获取关联的int值。我现在如何做它是在静态块中创建一个映射(使用枚举作为键,整数代码作为值)并使用此映射来获取与枚举相对应的代码。这是正确的做法吗?或者有没有更好的方法来实现同样的目标?

public enum TAXSLAB {
    SLAB_A(1),
    SLAB_B(2),
    SLAB_C(5);

    private static final Map<TAXSLAB, Integer> lookup = new HashMap<TAXSLAB, Integer>();

    static {
        for(TAXSLAB w : EnumSet.allOf(TAXSLAB.class)) {
            lookup.put(w, w.getCode());
        }
    }

    private int code;

    private TAXSLAB(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }

    public static int getCode(TAXSLAB tSlab) {
        return lookup.get(tSlab);
    }
}

这是相关的SO帖子。但是这里的答案是建议用int值作为枚举值创建地图。所以这不能用于使用枚举获取数值而不迭代地图

  

How to get enum's numeric value?

1 个答案:

答案 0 :(得分:3)

您不需要地图从code对象中检索enum,因为TAXSLAB.getCode(s)的调用产生与s.getCode()相同的值:

TAXSLAB s = ...
int c1 = TAXSLAB.getCode(s);
int c2 = s.getCode();
// c1 == c2 here

int codeenum TAXSLAB对象的字段,因此您可以直接获取它。

这适用于enum内与enum相关联的值。如果您需要将值与enum之外的enum相关联,那么最有效的方法是使用专门为此目的设计的EnumMap类。