2012-06-14 10 views
5

मैं समझता हूँ कि मैं इस तरह एक enum बना सकते हैं:क्या जावा एनम में एक से अधिक कन्स्ट्रक्टर हो सकते हैं?

public enum MyEnum { 
    ONE(1), 
    TWO(2); 
    private int value; 
    private MyEnum(int value) { 
     this.value = value); 
    } 
    public int getValue() { 
     return value; 
    } 
} 

लेकिन मैं कुछ सवाल हैं:

1) ऐसा लगता है कि enum मूल्यों शुरू में घोषणा की जाती है। इसके लिए कोई विशेष प्रारूप है। क्या मैं उन्हें कहीं भी घोषित कर सकता हूं?

2) एक से अधिक कन्स्ट्रक्टर के साथ एक enum घोषित करना संभव है और क्या यह कभी-कभी लोग ऐसा करते हैं?

+0

साझा करने के लिए देखभाल करें कि आप इसका उपयोग कैसे करना चाहते हैं? –

+1

मुझे आश्चर्य है कि आपने अभी कोशिश क्यों नहीं की 2) पहले? –

+0

आप [अधिभार कन्स्ट्रक्टर] भी कर सकते हैं (http://stackoverflow.com/q/6870710/1064325)। – falsarella

उत्तर

5
public enum MyEnum { 
    ONE(1), 
    TWO(1, 2); 
    private int value1, value2; 

    private MyEnum(int value) { 
     this.value1 = value; 
     this.value2 = 0; // default 
     // this.value2 = getFromSomewhereElse(); // get it at runtime 
    } 

    private MyEnum(int value1, int value2) { 
     this.value1 = value1; 
     this.value2 = value2; 
    } 

    public int getValue1() { 
     return this.value1; 
    } 

    public int getValue2() { 
     return this.value2; 
    } 
} 
  1. हाँ, आप शुरू में enum मूल्यों घोषित करना चाहिए। हमेशा।
  2. उपरोक्त कोड देखें। हो सकता है। यदि लोग ऐसा करते हैं तो यह आवेदन पर निर्भर करता है। यदि आपके पास बहुत से फ़ील्ड हैं और उनमें से अधिकतर डिफ़ॉल्ट मान होना चाहिए, तो कई रचनाकारों का उपयोग करना एक अच्छी बात है। साथ ही, फ़ील्ड के मान रनटाइम पर पढ़ सकते हैं (फ़ाइल या किसी अन्य स्थिर वर्ग से)।
8
  1. हां, उन्हें एनम कक्षा के अन्य क्षेत्रों से पहले घोषित किया जाना चाहिए।
  2. हां, उनके पास एक से अधिक कन्स्ट्रक्टर हो सकते हैं।

आप इसे स्वयं कोशिश करके खोज सकते थे।

+0

मुझे पता है, यह संभवतः कब तक ले सकता है? हालांकि, यह अब यहां है जब अन्य इसके लिए खोज करते हैं। मुझे अधिक दिलचस्पी है कि यह कौन सा मामला उपयोगी होगा –

+0

एक enum एक वर्ग है। यदि आप समझ गए हैं कि कक्षा के लिए कई रचनाकार उपयोगी क्यों हो सकते हैं, तो आप यह भी समझ गए हैं कि वे एक enum के लिए क्यों हो सकता है: इसी कारण से। –

+0

एनम एक विशेष प्रकार की कक्षा है। बस एक उदाहरण दिखाए जाने से यह एक और अधिक उपयोगी टिप्पणी होगी कि मैं ओवरलोडिंग कन्स्ट्रक्टर को समझ नहीं पा रहा हूं। आपकी टिप्पणी से मुझे लगता है कि उदाहरण कुछ फ़ील्ड को डिफॉल्ट कर देगा, यह उन रचनाकारों को ओवरलोड करने के लिए सबसे आम उपयोग है जो मुझे पता है ... –

3
  1. JLS 7 के अनुसार, स्थिरांक पहले जाते हैं।

  2. "एनम घोषणा के भीतर कोई भी निर्माता या सदस्य घोषणाएं एनम प्रकार पर लागू होती हैं जैसे कि वे एक सामान्य वर्ग घोषणा के वर्ग निकाय में उपस्थित थे, जब तक कि स्पष्ट रूप से अन्यथा न कहा गया हो।" और "यह एक संकलन-समय त्रुटि है यदि एक एनम प्रकार का एक निर्माता घोषित सार्वजनिक या संरक्षित है।" (Ibid।, 8.9.2)

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