2016-05-03 5 views
5

Mam Enum:Get Enum instancji

public enum Type { 

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

    private final int id; 

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

    public int getId() { 
     return id; 
    } 
} 

Jak mogę uzyskać Type enum przechodzącą id nieruchomość?

+3

Można iterować wartości 'Type' i szukać" id "; lub wypełnij 'Map '. –

+0

[To może być dokładnie to, czego potrzebujesz.] (Http://stackoverflow.com/a/2965252/1682559) (oprócz tego, że masz 'int id' zamiast' String text'. –

Odpowiedz

0

Wypróbuj to. Stworzyłem metodę, która przeszukuje typ za pomocą id:

public static Type getType(int id) { 

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

utworzyć metodę wewnątrz klasy Type zwrotu Enum instancje:

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: trzeba dodać default w switch-case lub dodać return null na koniec sposobu, aby uniknąć błędów kompilatora.


UPDATE (dzięki @AndyTurner):

Byłoby lepiej pętli i odnoszą się do pola id, więc nie jesteś powielanie identyfikatory.

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

Byłoby lepiej i sprawdź pole "id", więc nie duplikujesz identyfikatorów –

+0

@AndyTurner zaktualizowano odpowiedź ... ale ... dlaczego mówisz, że duplikuję identyfikator? Brakuje mi czegoś lub masz na myśli napisz wiersz po każdym id ?? –

+0

Mam na myśli to, że jeśli chcesz zmienić ID dla 'ADMIN', musisz zmienić go w dwóch miejscach (deklaracja wystąpienia i przełącznik). –

6

można zbudować mapę do zrobienia tego odnośnika.

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

Najbardziej lubię to rozwiązanie. Jest czysty i ma najlepszą wydajność dla arbitralnie dużych wyliczeń. – brimborium