2010-07-04 18 views
6

मैं इस तरह एक enum singletom पैटर्न का उपयोग कर रहा बनाओ:एक enum उदाहरण निजी

public enum LicenseLoader implements ClientLicense { 
    INSTANCE; 

    /** 
    * @return an instance of ClientLicense 
    */ 
    public static ClientLicense getInstance() { 
     return (ClientLicense)INSTANCE; 
    } 

    ...rest of code 

} 

अब मैं इंटरफ़ेस लौट सकते हैं और तथ्य यह है कि हम वास्तव में सब पर एक enum का उपयोग कर रहे छुपाना चाहते हैं। मैं चाहता हूं कि ग्राहक getInstance() का उपयोग करें और लाइसेंसलोडर नहीं। एक दिन के रूप में मैं आवश्यक होने पर एक अलग पैटर्न का उपयोग करने का फैसला कर सकता हूं।

निवेश को enumance निजी बनाना संभव है?

उत्तर

4

क्या एक public interface और private enum बनाने के बारे में implements एक सिंगलटन INSTANCE निरंतर साथ इंटरफेस ने कहा कि,?

तो, कुछ इस तरह (संक्षिप्तता के लिए एक कक्षा में सभी):

public class PrivateEnum { 

    public interface Worker { 
     void doSomething(); 
    } 

    static private enum Elvis implements Worker { 
     INSTANCE; 
     @Override public void doSomething() { 
      System.out.println("Thank you! Thank you very much!"); 
     } 
    } 

    public Worker getWorker() { 
     return Elvis.INSTANCE; 
    } 
} 

इस तरह, आप Elvis.INSTANCE उजागर नहीं कर रहे हैं (या यहां तक ​​enum Elvis बिल्कुल), एक interface का उपयोग कर अपने कार्यक्षमता को परिभाषित करने, सभी कार्यान्वयन विवरण छुपाएं।

+0

अच्छा विचार धन्यवाद। – jax

+1

यह पूरी तरह से काम करता है, इसने मुझे वर्कर पैकेज निजी बनाने की इजाजत दी, जिससे मुझे कुछ चीजें मिलें जो मैं बाहरी दुनिया में निजी रखना चाहता था लेकिन पैकेज संदर्भ के अंदर उपलब्ध था। – jax

+0

जैसा कि मैंने समझाया है, 'enum' उदाहरण अभी भी उपलब्ध है। –

1

सभी enum स्थिरांक उपलब्ध हैं। उदाहरण के लिए deserialisation या enum - विशिष्ट प्रतिबिंबित तरीकों के माध्यम से।

हमेशा के रूप में, मैं दृढ़ता से सिंगलेट से बचने का सुझाव देता हूं।

+1

आप बुरी सलाह दे रहे हैं। "एनम सिंगलटन पैटर्न परिष्कृत क्रमबद्धता या प्रतिबिंब हमलों के सामने भी कई तात्कालिकता के खिलाफ लोहे की गारंटी प्रदान करता है।" (प्रभावी जावा - जोशुआ ब्लोच) – jax

+1

नहीं, मैं आपको बुरी सलाह नहीं दे रहा हूं। –

+0

@ टॉम: आपका क्या मतलब है कि यह "अभी भी उपलब्ध है" (मेरे उत्तर पर टिप्पणी करें)? 'enum' पर 'निजी' पहुंच-योग्यता संशोधक लोहेक्लाड नहीं है (उदा। 'सेटएक्सेबल' हमला), लेकिन यह '' enum' नहीं, बल्कि प्रत्येक' वर्ग 'के लिए सही है। – polygenelubricants

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