2012-06-11 15 views
6

मैं अक्सर इस तकनीक का उपयोग करता हूं लेकिन मुझे यकीन नहीं है कि इसे क्या कॉल करना है। मैं इसे सहयोगी enums कहते हैं। क्या वो सही है?इस enum पैटर्न क्या कहा जाएगा?

उदाहरण:

public enum Genders { 

    Male("M"), Female("F"), Transgender("T"), Other("O"), Unknown("U"); 

    private String code; 

    Genders(String code) { 
     this.code = code; 
    } 

    public String getCode() { 
     return code; 
    } 

    public static Genders get(String code) { 
     for (Genders gender : values()) { 
      if (gender.getCode().equalsIgnoreCase(code)) { 
       return gender; 
      } 
     } 
     return null; 
    } 
} 
+1

मुझे यह भी पता नहीं था कि आप इस तरह कोड लिख सकते हैं! –

+6

यह एक पैटर्न नहीं है। यह सिर्फ नियमित कोड है जो समझता है कि enums कक्षाएं हैं। मैं अक्सर यह भी करता हूं, लेकिन मैं enum लिंग (बिना एस) का नाम दूंगा, और मूल्य के साथ संगत होने के लिए शून्य को वापस करने के बजाय एक अवैध अर्ग्यूमेंट अपवाद को फेंक दूंगा() –

+0

आप विशेष रूप से "पैटर्न" के रूप में क्या कह रहे हैं? क्या यह तथ्य है कि आपके पास 'get' विधि है? – templatetypedef

उत्तर

2

मैं कहूंगा कि Multiton Pattern जैसा उचित दिखता है। यदि आप एरिक्ब के रूप में करते हैं और लूपिंग के बजाय मानचित्र का उपयोग करते हैं, तो मैं कहूंगा कि यह ठीक मल्टीटन पैटर्न की तरह है।

3

मैं ऐसा करने के लिए कक्षाओं का एक सेट है, लेकिन मैं के लिए यह अन्य की तुलना में Encodable

interface Encodable<T>{ 
    T getCode(); 
} 

public class EnumUtils{ 

     public static <U, T extends Enum<T> & Encodable<U>> T getValueOf(
      @Nonnull Class<T> enumClass, 
      @Nullable U code){ 

      for (T e : enumClass.getEnumConstants()){ 
       if (Objects.equal(e.getCode(), code)) 
        return e; 
      } 

      throw new IllegalArgumentException("No enum found for " + code); 
     } 
} 
1

एक नाम नहीं है मैं कहेंगे यह है एक बहुत ही , बहुत सरल पार्सर।

संबंधित मुद्दे