2013-12-15 33 views
0

請考慮下面的Java枚舉:非序INT爲ENUM

public enum carrier { 
    Default(0), 
    CarrierOne(1), 
    CarrierTwo(2), 
    CarrierWhoKnows(102312); 
    private final int value; 
    private static final Map<Integer, carrier> carrierMap = new HashMap<Integer, carrier>(); 

    static { 
     for (carrier type : carrier.values()) { 
      carrierMap.put(type.value, type); 
     } 
    } 

    private carrier(int value) { 
     this.value = value; 
    } 

    public static int getIntValue(int value) { 
     return value; 
    } 

    public static carrier getStringValue(int value) { 
     return carrierMap.get(value); 
    } 
} 

我需要的是getIntValue返回值,因爲它 (即102312),然而,作爲一個枚舉,而不是一個int 。是否可能 將int值102312作爲枚舉進行投射。 請注意,我不是指序數(我們不使用), 或getStringValue正確返回的字符串值。 我指的是返回值102312作爲枚舉而不是int。

由於事先

尼克。

+1

不,這是不可能的。你爲什麼要這個? –

+2

從我可以告訴getStringValue完全正確地說你要getIntValue做什麼。請澄清。無論如何,Enums既不是字符串也不是整數;你不能從int轉換到任何類(除了自動裝箱到Integer),因爲int不是一個類。 – Vitruvius

+0

爲什麼你在'getIntValue(int value)'中返回'value'的值?它究竟應該做什麼?最後,'getStringValue'不返回一個'String'。 –

回答

1

如果我理解你很好,你只是想通過它的int值獲得枚舉成員。

public static carrier getStringValue(int value) { 
    for(carrier c : carrier .values()){ 
     if(c.value == value) return c; 
    } 
    throw new IllegalArgumentException("Got illegal value"); 
} 

請檢查您的代碼是否更具可讀性。更改方法名稱,重命名枚舉名稱(必須是Carrier),考慮getIntValue方法簽名和實現。看起來應該與getStringValue相反,並返回枚舉成員的int值

public static int getIntValue(carrier c) { 
    if(c == null) throw new IllegalArgumentException("Got null, expected carrier");  
    return c.value; 
} 
+1

爲了更容易理解'getStringValue'應該被命名爲'getByValue' – hatesms

相關問題