2015-09-22 81 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類專門爲此設計的。