2015-09-22 48 views
0

我有一个枚举,并且每个值都有一个整数值。我的一个函数接受枚举。在函数体中,我想获取关联的int值。我现在正在做的是在静态块中创建一个映射(枚举为键,整数代码为值),并使用此映射获取与枚举相对应的代码。这是做这件事的正确方法吗?或者有没有更好的方法来实现这一目标?将int值与枚举相关联并获取相应的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?

+0

你试过在你的enum上调用.ordinal()吗? – Paddyd

+3

@Paddyd他的int参数与序号不匹配。 – EpicPandaForce

+0

@EpicPandaForce是啊,我只注意到:/ – Paddyd

回答

3

你不需要地图从一个enum对象检索code,因为TAXSLAB.getCode(s)通话产生相同的值s.getCode()

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

int codeenum TAXSLAB对象的字段,所以你可以直接得到它。

这适用于带有enumenum内关联的值。如果您需要与enum的值enum外关联,这样做的最高效的方法是使用EnumMap类专门为此设计的。