2011-08-25 12 views
17

Próbuję ustawić wartości do wyliczenia w mojej aplikacji java .... ale nie mogę tego zrobić.Ustaw wartość na wyliczenie - Java

Czy robię to źle ???

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

Daje mi ten błąd: Konstruktor RPCPacket.RPCPacketDataType (int) jest niezdefiniowany.

Odpowiedz

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

Można również zdefiniować metody na swojej wyliczenia, tak jak w „normalnej” klasy.

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

Mam kolejne pytanie. Jak mogę zrobić coś takiego: RPCPacketDataType currentType; if (currentType! = PT_JSON) return; –

+0

Używałbym 'switch' dla wyliczeń:' switch (currentType) {case PT_JSON: ...} ' – emboss

+0

Właściwie muszę tylko sprawdzić PT_JSON, dlatego używam instrukcji if.But dzięki za postęp! –

6

Powinieneś utworzyć Contructor, który akceptuje parametr int. Dodaj także pole int, które będzie zawierało przekazaną wartość.

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

    private int mValue; 

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

Można też dodać getter mieć dostęp do wartości później. –

+1

Mam nadzieję, że można łatwo dodać dowolną metodę do tej klasy. Pytanie dotyczy dodawania wartości, ale ich nie odzyskuje :) – 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 
    } 

} 

Ponieważ zarówno #emboss i #Michael powiedział poprawnie można użyć contructor która przyjmuje Ant int

Powiązane problemy