2013-10-03 8 views
6

आप निम्नलिखित enum है कहते हैं:जावा enum valueOf "ओवरराइड" नामकरण सम्मेलन

public enum Color { 
    RED("R"), GREEN("G"), BLUE("B"); 
    private String shortName; 

    private Color(String shortName) { 
     this.shortName = shortName; 
    } 

    public static Color getColorByName(String shortName) { 
     for (Color color : Color.values()) { 
      if (color.shortName.equals(shortName)) { 
       return color; 
      } 
     } 
     throw new IllegalArgumentException("Illegal color name: " + shortName); 
    } 
} 

enum के बाद से एक विशेष मामला है, जब आप बस valueOf समारोह नहीं ओवरराइड कर सकते हैं, के लिए नामकरण परंपरा क्या है इसे रोकने और मूल्य लागू करने के लिए (स्ट्रिंग नाम)?

getColorByName(String name) 
getValueOf(String name) 
permissiveValueOf(String name) 
customValueOf(String name) 
forName(String name) 
getEnum(String name) 
getColor(String name) 

बाद में संपादित करें: मुझे लगता है कि बलोच प्रभावी में जावा 2 एड देखते हैं। getInstance() (अध्याय 1, आइटम 1) की तर्ज पर कुछ प्रस्तावित करता है। बस एक और विकल्प जोड़ने के लिए।

+5

http://en.wikipedia.org/wiki/Method_overriding#Java अधिभावी विधि नाम रहता है। –

+0

यहां तक ​​कि ओवरलोडिंग एक ही नाम रखती है, लेकिन हस्ताक्षर बदलती है। ऐसा लगता है जैसे हम पूरी तरह से अलग नामों के बारे में बात कर रहे हैं ... –

+5

दोस्तों ... हम enums के बारे में बात कर रहे हैं। आप valueOf() और मानों() को ओवरराइड नहीं कर सकते हैं। मैं इसे इंगित करने के लिए शीर्षक बदल दूंगा। लेकिन कृपया अपने नीचे वोट हटा दें और मुझे जवाब दें। –

उत्तर

13

आप निश्चित रूप से सही हैं, आप Enum#valueOf() ओवरराइड नहीं कर सकते हैं क्योंकि यह Enum कक्षा का एक स्थिर तरीका है।

मुझे नहीं लगता कि नामकरण सम्मेलन है। जैसा कि आप पहले ही बताया है, वहाँ जावा में कुछ उदाहरण हैं:

मैं getEnum का उपयोग नहीं होगा, जब से तुम Enum नहीं मिल रहा है ही, बल्कि एक मूल्य। forName() का उपयोग करना उचित नहीं है, Rनाम लाल रंग का नहीं है।

मैं नहीं बल्कि साथ जाना होगा:

  • fromString() के बाद से यह toString() के लिए एक विपरीत है; जावा मानक लाइब्रेरी के साथ स्थिरता के लिए
  • getColor()
+0

पसंद है समस्या यह है कि मुझे एनम के जावा विनिर्देशन में कोई उदाहरण नहीं मिला। रंग और कक्षा कक्षाएं हैं और न कि enums। इस प्रकार आप एक valueOf विधि भी जोड़ सकते हैं, लेकिन आप स्विच (रंग) –

+0

"सेब्लहा" को समझ नहीं सकते हैं। उदाहरण के लिए, 'Response.Status.fromStatusCode' देखें। – jtoberon

+0

कोई मानक नहीं है और यह बहुत आम नहीं है, इसलिए आपको किसी भी मजबूत सम्मेलन की संभावना नहीं है। जब तक आप cglib (!) से स्ट्रिंग के साथ गड़बड़ करना शुरू नहीं करना चाहते हैं तो शायद सबसे अच्छा है। निश्चित रूप से कोई भी इसे पढ़ने पर उलझन में नहीं जा रहा है। –

1

मैं जोड़ी का प्रयोग करेंगे:

Color fromValue(String value) 
String toValue() 

यह कुछ है कि मैं अपने enums में सबसे उपयुक्त पाया गया है।

2

निम्नलिखित पर भी विचार करें!

Color fromName(String name); 
Color fromShortName(String shortName); 
Color fromCode(String code); 
संबंधित मुद्दे