2016-05-03 7 views
5

を取得します。私は<code>Enum</code>持つ列挙型インスタンス

public enum Type { 

    ADMIN(1), 
    HIRER(2), 
    EMPLOYEE(3); 

    private final int id; 

    Type(int id){ 
     this.id = id;  
    } 

    public int getId() { 
     return id; 
    } 
} 

がどのように私はidプロパティを渡すType列挙型を得ることができますか?

+3

あなたは 'Type'値を繰り返してあなたの' id'を探すことができます。 'Map 'を読み込んでください。 –

+0

[これはあなたが必要とするものかもしれません。](http://stackoverflow.com/a/2965252/1682559)(ただし、 'String text'の代わりに' int id'を使用しています) –

答えて

0

これを試してください。 IDを使って型を検索するメソッドを作成しました:

public static Type getType(int id) { 

    for (Type type : Type.values()) { 
     if (id == type.getId()) { 
      return type; 
     } 
    } 
    return null; 
} 
2

Enumインスタンスを返すTypeクラス内のメソッドを作成します。

Type get(int n) { 
    switch (n) { 
    case 1: 
     return Type.ADMIN; 
    case 2: 
     return Type.EMPLOYEE; 
    case 3: 
     return Type.HIRER; 
    default: 
     return null; 
    } 

} 

はTIP:あなたがswitch-casedefaultを追加したり、コンパイラのエラーを回避するために、メソッドの最後にreturn nullを追加する必要があります。


UPDATE@AndyTurnerのおかげで):

あなたがIDを複製していないので、それは、ループする方がよいとidフィールドを参照することになります。

Type fromId(int id) { 
    for (Type t : values()) { 
     if (id == t.id) { 
      return t; 
     } 
    } 
    return null; 
} 
+2

ループしてIDフィールドを参照してIDを複製しないでください –

+0

@AndyTurnerは答えを更新しました...しかし...なぜあなたは私がIDを複製していると言っていますか?各IDで行を書くのですか? –

+0

'ADMIN'のIDを変更したい場合は、2つの場所(インスタンス宣言とスイッチ)で変更する必要があります。 –

6

あなたは、この検索を行うためのマップを構築することができます。

static final Map<Integer, Type> id2type = new HashMap<>(); 
static { 
    for (Type t : values()) 
     id2type.put(t.id, t); 
} 
public static Type forId(int id) { 
    return id2type.get(id); 
} 
+1

私はこの解決策が一番好きです。それはきれいで、任意に大きな列挙型に対して最高のパフォーマンスを持っています。 – brimborium