2011-08-25 138 views
17

我想設置值枚舉在我的Java應用程序....但我不能這樣做。設置值枚舉 - Java

我做錯了嗎?

public enum RPCPacketDataType { 
    PT_UNKNOWN(2), 
    PT_JSON(4), 
    PT_BINARY(5) 
}; 

它給了我這個錯誤:構造函數RPCPacket.RPCPacketDataType(int)是未定義的。

回答

33
public enum RPCPacketDataType 
{ 
    PT_UNKNOWN(2), 
    PT_JSON(4), 
    PT_BINARY(5); 

    RPCPacketDataType (int i) 
    { 
     this.type = i; 
    } 

    private int type; 

    public int getNumericType() 
    { 
     return type; 
    } 
} 

您也可以定義你的枚舉的方法,你會在一個「正常」類。

System.out.println(RPCPacketDataType.PT_JSON.getNumericType() // => 4 
+0

我還有一個問題。我怎樣才能做到這一點: RPCPacketDataType currentType; if(currentType!= PT_JSON)return; –

+0

我想用'switch'作爲枚舉:'switch(currentType){case PT_JSON:...}' – emboss

+0

其實我只需要檢查PT_JSON,這就是爲什麼我使用if語句。但是感謝您的提前! –

6

您應該創建一個構造器,它接受int參數。還要添加一個int字段,它將保存傳遞的值。

public enum RPCPacketDataType { 
    PT_UNKNOWN(2), 
    PT_JSON(4), 
    PT_BINARY(5); 

    private int mValue; 

    RPCPacketDataType(int value) { 
     mValue = value; 
    } 
} 
+2

您可能還需要添加一個getter以後有機會獲得價值構造器。 –

+1

我希望人們可以輕易地將自己的任何方法添加到這個類中。問題是關於增加值,但不檢索他們:) – Michael

4
public enum RPCPacketDataType { 

    PT_UNKNOWN(2), 
    PT_JSON(4), 
    PT_BINARY(5); 

    private int type; 

    RPCPacketDataType(int type) { 
    this.type = type; 
    } 

    public int getNumericType() { 
    return type; 
    } 

    public void setNumericType(int type) { 
    this.type = type; 
    } 

    public static void main(String[] args) { 
    RPCPacketDataType.PT_UNKNOWN.setNumericType(0); 
    System.out.println("Type: "+RPCPacketDataType.PT_UNKNOWN.getNumericType()); 
    // Type: 0 
    } 

} 

由於兩個#emboss和#Michael說正確,您可以使用它接受螞蟻int