2016-05-03 15 views
5

Ich habe ein Enum:Get Enum-Instanz

public enum Type { 

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

    private final int id; 

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

    public int getId() { 
     return id; 
    } 
} 

Wie kann ich einen bekommen Type Enum eine id Eigenschaft vorbei?

+3

Sie könnten die 'Type' Werte durchlaufen und suchen Sie nach Ihrer' ID'; oder füllen Sie eine 'Map '. –

+0

[Dies könnte genau das sein, was Sie brauchen.] (Http://stackoverflow.com/a/2965252/1682559) (außer dass Sie eine 'int id' anstelle eines' String text' haben. –

Antwort

0

Probieren Sie es aus. Ich habe eine Methode erstellt, die Typ mit ID sucht:

public static Type getType(int id) { 

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

ein Verfahren in der die Enum Instanzen Rückkehr Type Klasse erstellen:

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

} 

TIPP: Sie brauchen default in switch-case hinzufügen oder ein return null am Ende des Verfahrens hinzufügen Compiler-Fehler zu vermeiden.


UPDATE (dank @AndyTurner):

Es wäre eine Schleife besser sein und auf das ID-Feld beziehen, so sind Sie nicht die IDs duplizieren.

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

Es wäre besser zu Schleife und beziehen Sie sich auf das Feld "ID", so dass Sie die IDs nicht duplizieren. –

+0

@AndyTurner aktualisierte Antwort ... aber ... warum sagst du, dass ich die IDs dupliziere? Ich vermisse etwas? oder du meinst Schreibe eine Zeile nach jeder ID ?? –

+0

Ich meine, wenn Sie die ID für 'ADMIN' ändern möchten, müssten Sie es an zwei Stellen ändern (die Instanz Deklaration und der Schalter). –

6

können Sie eine Karte bauen diese Lookup zu tun.

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

Ich mag diese Lösung am meisten. Es ist sauber und hat die beste Leistung für beliebig große Enums. – brimborium