我有一个枚举,我有一个与每个相关联的整数值。我的一个函数接受枚举。在函数体中,我想获取关联的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值作为枚举值创建地图。所以这不能用于使用枚举获取数值而不迭代地图
答案 0 :(得分:3)
您不需要地图从code
对象中检索enum
,因为TAXSLAB.getCode(s)
的调用产生与s.getCode()
相同的值:
TAXSLAB s = ...
int c1 = TAXSLAB.getCode(s);
int c2 = s.getCode();
// c1 == c2 here
int code
是enum TAXSLAB
对象的字段,因此您可以直接获取它。
这适用于enum
内与enum
相关联的值。如果您需要将值与enum
之外的enum
相关联,那么最有效的方法是使用专门为此目的设计的EnumMap
类。