2009-03-19 7 views
106

मैं आसपास के वर्ग के उदाहरण सदस्यों को एक enum के अंदर से नहीं देख सकता, जैसा कि मैं एक आंतरिक कक्षा के अंदर से कर सकता था। क्या इसका मतलब है कि enums स्थिर हैं? क्या आस-पास के वर्ग के उदाहरण के दायरे में कोई पहुंच है, या क्या मुझे इस घटना को एनम की विधि में पास करना है जहां मुझे इसकी आवश्यकता है?जावा में, कक्षा वर्ग के अंदर enum प्रकार हैं?

public class Universe { 
    public final int theAnswer; 

    public enum Planet { 
     // ... 
     EARTH(...); 
     // ... 

     // ... constructor etc. 

     public int deepThought() { 
      // -> "No enclosing instance of type 'Universe' is accessible in this scope" 
      return Universe.this.theAnswer; 
     } 
    } 

    public Universe(int locallyUniversalAnswer) { 
     this.theAnswer = locallyUniversalAnswer; 
    } 
} 
+0

मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं कि आप क्या वर्णन करने की कोशिश कर रहे हैं। क्या आप शायद एक छोटा कोड नमूना दे सकते हैं? – Pete

उत्तर

160

हां, घोंसले वाले enums निश्चित रूप से स्थैतिक हैं।

language specification section 8.9 से:

नेस्टेड enum प्रकार परोक्ष स्थिर रहे हैं। यह को स्वीकार्य होने के लिए एक नेस्टेड एनम प्रकार स्पष्ट रूप से घोषित करने योग्य है।

44

यह एक उदाहरण स्तर (गैर स्थिर) भीतरी enum वर्ग बनाने के लिए कोई मतलब नहीं होगा -

- enum उदाहरणों खुद को बाहरी वर्ग से बंधा रहे थे अगर वे enum गारंटी तोड़ने चाहते हैं जैसे यदि आप

public class Foo { 
    private enum Bar { 
     A, B, C; 
    } 
} 

enum मूल्यों के लिए किया था ठीक से (, psuedocode उपयोग प्रतिबंध अनदेखी) स्थिरांक के रूप में कार्य करने के लिए

Bar b1 = new Foo().A 
Bar b2 = new Foo().A 

B1 और B2 ही वस्तुओं होना जरूरी होगा।

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