2008-10-31 14 views
50

मैं एक अंतरफलक है - यहाँ एक उदाहरण के रूप में एक अच्छी तरह से काल्पनिक संस्करण है:नेस्टेड जावा एनम परिभाषा - स्थिर के रूप में घोषित करने से अंतर होता है?

public interface Particle { 

    enum Charge { 
     POSITIVE, NEGATIVE 
    } 

    Charge getCharge(); 

    double getMass(); 

    etc... 
} 

अगर मैं Charge enum के रूप में स्थिर परिभाषित इस के कार्यान्वयन कैसे व्यवहार करेगा में कोई अंतर नहीं है - यानी इस कोई असर करता है:

public interface Particle { 

    static enum Charge { 
     POSITIVE, NEGATIVE 
    } 

    Charge getCharge(); 

    double getMass(); 

    etc... 
} 

उत्तर

78

नहीं, इससे कोई फर्क नहीं पड़ता। हालांकि कारण यह नहीं है क्योंकि यह एक इंटरफ़ेस के अंदर एक सदस्य घोषणा है, जैसा कि जॉन कहते हैं। असली कारण भाषा कल्पना (8.9) कि

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

निम्न उदाहरण स्थिर पर कोई फर्क नहीं पड़ता है या तो (भले ही हम कोई इंटरफ़ेस है):

public class A { 
    enum E {A,B}; 
} 

public class A { 
    static enum E {A,B}; 
} 

एक अन्य उदाहरण एक नेस्टेड निजी enum (परोक्ष सार्वजनिक नहीं) के साथ।

public class A { 
    private static enum E {A,B} 
} 
+2

मैं तर्क दूंगा कि यह दोनों है - यह दो अलग-अलग कारणों से स्पष्ट रूप से स्थैतिक है, लेकिन उनमें से कोई भी अपने आप पर पर्याप्त होता। –

30

नहीं, इससे कोई फर्क नहीं पड़ता। language spec, section 9.5 से:

इंटरफेस सदस्य प्रकार घोषणाओं (§8.5) हो सकती है। एक इंटरफ़ेस में सदस्य प्रकार घोषणा निहित static और public है।

+0

हाँ (+1) और वास्तव में चेकस्टाइल 'स्थैतिक' को अनावश्यक रूप से ध्वजांकित करेगा और आपको इसे हटाने के लिए कहेंगे। इंटरफेस और एनोटेशन में चर स्वचालित रूप से सार्वजनिक, स्थैतिक और अंतिम होते हैं, इसलिए इन संशोधक भी अनावश्यक हैं। – VonC

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