2013-02-13 7 views
46

यह क्या मैं करने की कोशिश है:मैं जावा में एक आंतरिक कक्षा में एक enum क्यों नहीं बना सकता?

public class History { 
    public class State { 
     public enum StateType { 

ग्रहण मुझे StateType पर इस संकलन त्रुटि देता है: The member enum StateType must be defined inside a static member type

जब मैं State कक्षा स्थिर बना देता हूं तो त्रुटि गायब हो जाती है। मैं State स्थिर बना सकता हूं, लेकिन मुझे समझ में नहीं आता कि मैं एक आंतरिक कक्षा में enum क्यों घोषित नहीं कर सकता।

+1

कृपया इसे देखें: http://stackoverflow.com/questions/700831/java-local-enums –

+1

जब तक कि आप इतिहास में विधियों तक पहुंचने के लिए राज्य नहीं चाहते थे, राज्य को एक [स्थिर वर्ग] (http: // stackoverflow.com/a/1353326/2054731)। – ArneHugo

उत्तर

79

enum प्रकार है कि नेस्टेड प्रकार के रूप में परिभाषित कर रहे हैं हमेशा से रहे हैं परोक्ष static (JLS §8.9. Enums देखें)

आप एक स्थिर नेस्टेड प्रकार एक गैर स्थिर एक के अंदर नहीं हो सकता है (उर्फ एक "आंतरिक वर्ग", JLS §8.1.3. Inner Classes and Enclosing Instances देखें) ।

इसलिए आपके पास enum गैर-स्थैतिक नेस्टेड प्रकार के अंदर आंतरिक प्रकार नहीं हो सकता है।

2

+ जोआचिम सॉर से पहले से ही पर्याप्त जानकारी, मैं बस कुछ अतिरिक्त विवरण जोड़ रहा हूं।

आप आंतरिक आंतरिकता को केवल परिभाषित कर सकते हैं यदि आपकी आंतरिक कक्षा स्थिर घोंसला वाली आंतरिक कक्षा है। नीचे

private static class DbResource { 

    public enum DB { 
     MERGE_FROM, MERGE_TO, MAIN; 
    } 
} 
3

देखें जो इस तरह एक enum घोषित हैं:

enum Suit {SPADES, HEARTS, CLUBS, DIAMONDS} 

जावा कम्पाइलर कृत्रिम आप के लिए निम्नलिखित वर्ग उत्पन्न होगा:

final class Suit extends java.lang.Enum<Suit> { 
    public static final Suit SPADES; 
    public static final Suit HEARTS; 
    public static final Suit CLUBS; 
    public static final Suit DIAMONDS; 
    private static final Suit[] $VALUES; 
    public static Suit[] values(); 
    public static Suit valueOf(java.lang.String); 
    private Suit(); 
} 

अन्य बनाने के लिए कोई इरादा नहीं है इस वर्ग के उदाहरणों के अलावा उन स्थिर क्षेत्रों के अलावा जो पहले से परिभाषित हैं (जैसा कि आप अपने निजी कन्स्ट्रक्टर से अनुमान लगा सकते हैं), लेकिन सबसे महत्वपूर्ण बात यह है कि स्वीकृत उत्तर में उल्लिखित, आंतरिक कक्षा में स्थिर सदस्य नहीं हो सकते हैं (JLS §8.1.3. Inner Classes and Enclosing Instances), और चूंकि enum सिंथेटिक कक्षा करता है, यह इसे आंतरिक वर्ग के रूप में अस्वीकार्य बनाता है।

+0

आप यहाँ कैसे पहुंचे? :) –

+0

आपका क्या मतलब है? –

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