2011-08-25 189 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