2016-05-03 5 views
5

जाओ मैं एक Enum है:Enum उदाहरण

public enum Type { 

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

    private final int id; 

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

    public int getId() { 
     return id; 
    } 
} 

मैं एक Type enum एक id संपत्ति गुजर कैसे मिल सकता है?

+3

आप 'Type' मूल्यों पुनरावृति और अपने' id' के लिए दिखाई दे सकता है; या एक 'मानचित्र <पूर्णांक, प्रकार>' पॉप्युलेट करें। –

+0

[यह ठीक है कि तुम क्या जरूरत है हो सकता है।] (Http://stackoverflow.com/a/2965252/1682559) (सिवाय है कि आप एक 'एक' स्ट्रिंग text' के बजाय id' int। –

उत्तर

0

इसे आज़माएं। मैं एक तरीका है जिसके आईडी का उपयोग कर टाइप खोज बनाया है:

public static Type getType(int id) { 

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

Type वर्ग के अंदर एक विधि बनाएं Enum उदाहरणों लौटने:

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

} 

सुझाव: आप switch-case में default जोड़ सकते हैं या संकलक त्रुटियों से बचने के विधि के अंत में एक return null जोड़ने की जरूरत है।


अद्यतन (@AndyTurner करने के लिए धन्यवाद):

यह पाश करने के लिए बेहतर हो सकता है और, आईडी क्षेत्र का उल्लेख तो आप आईडी डुप्लिकेट नहीं कर रहे हैं।

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

यह बेहतर होगा पाश और इसलिए आप आईडी डुप्लिकेट नहीं कर रहे हैं 'id' क्षेत्र का उल्लेख,। –

+0

@AndyTurner अद्यतन जवाब ... लेकिन ... तुम क्यों कहते हैं कि मैं पहचान-पत्र की प्रतिलिपि कर रहा हूँ? मैं कुछ याद कर रहा हूँ? या क्या आपका मतलब प्रत्येक आईडी के आधार पर एक लाइन लिखने ?? –

+0

मेरा मतलब है आप 'ADMIN' के लिए आईडी को बदलना चाहते हैं, तो आप दो स्थानों (उदाहरण के घोषणा और स्विच) में इसे बदलने के लिए होगा कि। –

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

मुझे यह समाधान सबसे ज्यादा पसंद है। यह साफ है और मनमाने ढंग से बड़े enums के लिए सबसे अच्छा प्रदर्शन है। – brimborium