2011-08-25 14 views
17

Estoy tratando de establecer valores para enum en mi aplicación Java .... pero no puedo hacer eso.Establecer valor en Enum - Java

¿Lo estoy haciendo mal?

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

Me está dando este error: El constructor RPCPacket.RPCPacketDataType (int) no está definido.

Respuesta

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

También se pueden definir métodos en su enumeración como lo haría en una clase "normal".

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

Tengo otra pregunta. ¿Cómo puedo hacer algo como eso? RPCPacketDataType currentType; if (currentType! = PT_JSON) return; –

+0

Usaría 'switch' para enumeraciones:' switch (currentType) {case PT_JSON: ...} ' – emboss

+0

En realidad solo necesito verificar el PT_JSON, es por eso que estoy usando if statement.Pero gracias por el avance! –

6

Debe crear un Contructor que acepte un parámetro int. También agregue un campo int que contendrá el valor pasado.

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

    private int mValue; 

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

También puede añadir un captador para tener acceso al valor más adelante. –

+1

Espero que uno pueda agregar fácilmente cualquier método a esta clase. La pregunta es acerca de agregar valores pero no recuperarlos :) – 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 
    } 

} 

Como tanto #emboss y #Michael dicho correctamente, puede utilizar un Contructor que acepta hormiga int