2011-11-03 7 views
43

処理目的のために、変換するかenumと一致させる、Androidのネイティブコードから戻り値をlongまたはintの形で受け取っています。出来ますか ? どのようにですか?intをenumにマッチさせる方法

答えて

57

あなたが値や列挙型の完全な制御を持っている、と彼らはシーケンシャルであれば、あなたが列挙順序値を使用することができます。これは、序数を使用するよりもはるかに優れたアプローチである

enum Heyo 
{ 
    FirstVal, SecondVal 
} 

...later 

int systemVal = [whatever]; 
Heyo enumVal = Heyo.values()[systemVal]; 

int againSystemVal = enumVal.ordinal(); 
+5

列挙型の「値」を取得するために序数を使用することはお勧めしません。代わりに、代わりにインスタンスフィールドを使用します。 Josh BlochのEffective Java第2版のItem 31を参照してください。 –

50

enumを設定して、その中にlongまたはintを組み込むことができます。

例:

ePasswordType var = ePasswordType.NUMBER; 

int ValueOfEnum = var.getValue(); 

をあなただけint型を知っているとき列挙型を取得するには、以下を使用します。このファイルePasswordType.java

public enum ePasswordType { 

    TEXT(0), 
    NUMBER(1); 

    private int _value; 

    ePasswordType(int Value) { 
     this._value = Value; 
    } 

    public int getValue() { 
      return _value; 
    } 

    public static ePasswordType fromInt(int i) { 
     for (ePasswordType b : ePasswordType .values()) { 
      if (b.getValue() == i) { return b; } 
     } 
     return null; 
    } 
} 

あなたは、このように割り当てられた値にアクセスすることができますを作成します。これは:

ePasswordType t = ePasswordType.fromInt(0); 

javaの列挙型はveです各値が独自のクラスになるので強力です。

+3

を()。理由を知るには、Effective Java –

+0

@Kuffsを読んでください:整数値を使って列挙する**適切な方法がありますか? – Levit

+0

@Levitこの値は、設計時に実行時以外に設定されます。あなたがintだけを知っているときにenum値を取得することを意味するなら、私の編集された答えを見てください。 – Kuffs

関連する問題