जावा में, स्थिर वर्ग के अंदर एनम प्रकार हैं?


123

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

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;
    }
}

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

जवाबों:


176

हां, नेस्टेड एनम स्पष्ट रूप से स्थिर हैं।

से भाषा विनिर्देश खंड 8.9 :

नेस्टेड एनम प्रकार स्पष्ट रूप से स्थिर हैं। स्पष्ट रूप से एक नेस्टेड एनम प्रकार को स्थिर घोषित करने की अनुमति है।


45

यह एक उदाहरण स्तर (गैर-स्थिर) आंतरिक एनम वर्ग बनाने के लिए कोई मतलब नहीं होगा - अगर एनम उदाहरण खुद बाहरी वर्ग से बंधे थे तो वे एनम गारंटी को तोड़ देंगे -

जैसे अगर आपके पास था

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

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

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

b1 और b2 को एक ही वस्तु होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.