2011-08-25 19 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; 
    } 
} 

あなたが「正常な」クラスと同じようにまた、あなたの列挙型でメソッドを定義することができます。両方#embossとして

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

私は別の質問があります。どのように私はそのようなことをすることができます: RPCPacketDataType currentType; if(currentType!= PT_JSON)が返されます。 –

+0

私は 'switch(currentType){case PT_JSON:...}' – emboss

+0

実際には私はPT_JSONをチェックする必要があるので、私はstatement.Butアドバンスのために使用しています! –

6

intパラメータを受け入れるContructorを作成する必要があります。また、渡された値を保持するintフィールドを追加します。

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

    private int mValue; 

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

を受け入れるコンストラクタを使用することができ、正しく述べました。 –

+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 
    } 

} 

と#Michaelはあなたがあなたが、後で値へのアクセスを持っているゲッターを追加することもアリint