2011-11-16 145 views
177

我有一個返回int類型的函數。但是,我只有TAX枚舉的價值。如何將枚舉值轉換爲int?

如何將TAX枚舉值轉換爲int?

public enum TAX { 
    NOTAX(0),SALESTAX(10),IMPORTEDTAX(5); 

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

TAX var = TAX.NOTAX; // This value will differ 

public int getTaxValue() 
{ 
    // what do do here? 
    // return (int)var; 
} 
+1

的【如何匹配的int枚舉]可能的複製(http://stackoverflow.com/questions/7996335/how-to-match-int-to-enum) – malat

回答

273

您需要使枚舉暴露value以某種方式,例如,

public enum Tax { 
    NONE(0), SALES(10), IMPORT(5); 

    private final int value; 
    private Tax(int value) { 
     this.value = value; 
    } 

    public int getValue() { 
     return value; 
    } 
} 

... 

public int getTaxValue() { 
    Tax tax = Tax.NONE; // Or whatever 
    return tax.getValue(); 
} 

(我已經改變了名稱是有點更傳統和可讀性,順便說一句。)

這是假設要在構造函數中指定的值。如果這不是你想要的,你需要給我們更多的信息。

+11

這裏有一個更好的主意http://stackoverflow.com/a/7996473/398348 – likejiujitsu

+0

@likejiujitsu:這是相反的方向。在這個問題中,OP已經*具有* Tax類型的值,並且想要從中獲取數字值。 –

+0

我剛剛試過並意識到它失敗'myEnumValue = MyEnum.valueOf(myInt);'該參數必須是字符串類型 - 或者有什麼我失蹤? – likejiujitsu

16

如果您想要在構造函數中分配的值,則需要在枚舉定義中添加一個方法以返回該值。

如果您想要一個代表枚舉值的唯一編號,您可以使用ordinal()

+2

要小心。還有更多的依賴ordinal()的發展反模式比'ordinal()'的有效用例要多。如果您需要爲'enum'存儲一個唯一值,那麼只需存儲'enum'。有EnumSets,枚舉列表,EnumMaps和幾乎任何其他可能需要的Enum集合。 –

+1

@EdwinBuck:這很好指出,我只是想提一下'ordinal()'的存在,因爲OP沒有說明他希望int實際上是什麼。 – unholysampler

+0

不要序號。請檢查關於這一點的枚舉API。刪除了投票權。 –

161

我更喜歡這樣的:

public enum Color { 

    White, 

    Green, 

    Blue, 

    Purple, 

    Orange, 

    Red 
} 

則:

//cast enum to int 
int color = Color.Blue.ordinal(); 
+27

這是不正確/不被Joshua Bloch在他的書Effective Java(第二版)中推薦的。見第31項。 – user504342

+1

直接使用ordinal方法不推薦使用。 – tonga

+25

@ user504342我沒有這本書的第二版,所以請你給我們爲什麼不推薦它的要點? – likejiujitsu

6

有時一些C#方法使得在Java世界中的生活更輕鬆..:

class XLINK { 
static final short PAYLOAD = 102, ACK = 103, PAYLOAD_AND_ACK = 104; 
} 
//Now is trivial to use it like a C# enum: 
int rcv = XLINK.ACK; 
+0

對我來說,這是最理想的方式。我得到了enum(代碼清晰度)的好處,這是一種數據庫友好的數據類型,我不必研究100個枚舉替代方法來實現「android方式」。簡單而有效。 –

1

也許是更好地使用字符串表示而不是整數,因爲如果將值添加到枚舉中,則字符串仍然有效。您可以使用枚舉的name()方法將枚舉值轉換爲String的枚舉valueOf()方法,以再次從String中創建枚舉表示。下面的例子演示瞭如何枚舉值轉換爲字符串和背面(值類型是一個枚舉):

ValueType expected = ValueType.FLOAT; 
String value = expected.name(); 

System.out.println("Name value: " + value); 

ValueType actual = ValueType.valueOf(value); 

if(expected.equals(actual)) System.out.println("Values are equal");