2013-01-21 29 views
13

यह enum क्यों अपनी फ़ाइल में घोषित किया गया है। क्या इसका कोई फायदा है? इसके अलावा मैं इसे 2 फाइलों में से एक में कैसे डाल सकता हूं। मुझे वास्तव में कोई संकेत नहीं है कि मैं क्या कर रहा हूं। कृपया इसे सरल तरीके से समझाएं, क्योंकि यह एक पाठ्यपुस्तक उदाहरण है, और मैं जावा के लिए बिल्कुल नया हूं।जावा में एक अलग फ़ाइल में घोषित एक enum क्यों घोषित किया गया है?

ScaleName.java

enum ScaleName {celsius, fahrenheit, kelvin, rankine}; 

Temperature.java

class Temperature { 

    private double number; 
    private ScaleName scale; 

    public Temperature() { 
     number = 0.0; 
     scale = ScaleName.fahrenheit; 
    } 

    public Temperature(double number) { 
     this.number = number; 
     scale = ScaleName.fahrenheit; 
    } 

    public Temperature(ScaleName scale) { 
     number = 0.0; 
     this.scale = scale; 
    } 

    public Temperature(double number, ScaleName scale) { 
     this.number = number; 
     this.scale = scale; 
    } 

    public void setNumber(double number) { 
     this.number = number; 
    } 

    public double getNumber() { 
     return number; 
    } 

    public void setScale(ScaleName scale) { 
     this.scale = scale; 
    } 

    public ScaleName getScale() { 
     return scale; 
    } 
} 

UseTemperature.java

class Temperature { 

    private double number; 
    private ScaleName scale; 

    public Temperature() { 
     number = 0.0; 
     scale = ScaleName.fahrenheit; 
    } 

    public Temperature(double number) { 
     this.number = number; 
     scale = ScaleName.fahrenheit; 
    } 

    public Temperature(ScaleName scale) { 
     number = 0.0; 
     this.scale = scale; 
    } 

    public Temperature(double number, ScaleName scale) { 
     this.number = number; 
     this.scale = scale; 
    } 

    public void setNumber(double number) { 
     this.number = number; 
    } 

    public double getNumber() { 
     return number; 
    } 

    public void setScale(ScaleName scale) { 
     this.scale = scale; 
    } 

    public ScaleName getScale() { 
     return scale; 
    } 
} 
+0

यह भी देखें [* Enums *] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html)। – trashgod

उत्तर

20

जावा में एक अलग फ़ाइल में घोषित एक enum क्यों है?

आप करना एक अलग फाइल में एक enum घोषित करने के लिए नहीं है। आप ऐसा कर सकता है:

public class Temperature { 
    public enum ScaleName {celsius, fahrenheit, kelvin, rankine}; 

    private double number; 
    private ScaleName scale; 

    public Temperature() { 
     number = 0.0; 
     scale = ScaleName.fahrenheit; 
    } 
    ... 
} 

इस और के बीच फर्क सिर्फ इतना है enum एक शीर्ष स्तर वर्ग बनाने कि अब आप की जरूरत अर्हता enum जब आप एक अलग वर्ग में इसका इस्तेमाल का नाम है।

लेकिन यहां क्या हो रहा है यह नहीं है कि एनम नियमित कक्षा होने पर क्या होता है। (और एक enum तो हम एक static कीवर्ड की जरूरत नहीं है, परोक्ष स्थिर है ...)


इस enum अपने स्वयं के फ़ाइल में घोषित क्यों है।

क्योंकि कोड लेखक ने इसे इस तरह से चुना है।

क्या इसका कोई फायदा है?

हां। इसका मतलब है कि इसका उपयोग करने के लिए enum को अर्हता प्राप्त करने की आवश्यकता नहीं है ... कुछ परिस्थितियों में जहां आपको enum उपरोक्त के रूप में घोंसला किया गया था।


वास्तव में, जावा आप एक ही स्रोत फ़ाइल बशर्ते कि सब लेकिन वर्गों में से एक "पैकेज निजी" है में अनेक शीर्ष स्तरीय कक्षाएं लगाने के लिए अनुमति मिल जाएगी। हालांकि, ऐसा करना आमतौर पर खराब शैली माना जाता है, और यह कुछ उपकरण श्रृंखलाओं के लिए समस्याग्रस्त हो सकता है ... मैंने सुना है।

+0

यदि आप अपनी फाइल में गणना डाल रहे हैं, तो आपको इसे ऊपर की कक्षा में लपेटने की आवश्यकता नहीं है। आप बस ScaleName.java फ़ाइल के अंदर "सार्वजनिक enum ScaleName" के रूप में गणना घोषित कर सकते हैं, और फिर आपको नाम को अर्हता प्राप्त करने की आवश्यकता नहीं है। –

+0

क्या मैंने पहले ही यह नहीं कहा था? (*"एकमात्र अंतर ...."*) –

3

एक enum एक class है और एक ही नियमों इस प्रकार है।

इसे अपनी फ़ाइल पर रखने के लिए एक अलग फ़ाइल में एक आंतरिक कक्षा को स्थानांतरित करने की तरह है, और कुछ भी कम नहीं। तो हाँ, आप इसे कक्षा में से किसी एक के अंदर ले जा सकते हैं और इसे OuterClass.ScaleName सिंटैक्स के साथ बाहर से एक्सेस करने में सक्षम हो सकते हैं।

10

Enums जावा में केवल बेयर मान नहीं हैं, वे उससे कहीं अधिक हैं। वे कक्षाएं अपने ही अधिकार में हैं (वे Object उत्तराधिकारी हैं)। और इन पर विचार करें:

public enum Int { 
    ONE(1), 
    TWO(2); 

    private final int value; 

    Int(final int value) { this.value = value; } 

    public int getValue() { return value; } 

    @Override 
    public String toString() { return "I am integer " + value; } 
} 

भी विचार करें:

public enum Operation 
{ 
    PLUS 
     { 
      @Override 
      public int calculate(final int i1, final int i2) 
      { 
       return i1 + i2; 
      } 
     }; 

    public abstract int calculate(int i1, int i2); 
} 

final int ret = Operation.PLUS.calculate(2, 3); 

और आप उन दोनों को भी जोड़ सकते हैं। वे बहुत शक्तिशाली उपकरण हैं।

+0

मुझे यकीन है कि यह एक अच्छा जवाब है, और समझ में आता है, किसी के लिए और अधिक उन्नत है। हालांकि आपका कोड बहुत जटिल है, तो सिंटैक्स जिसे मैं अब तक जानता हूं। मैं सीख रहा हूं, एक विशेषज्ञ नहीं। –

+0

आप समान रूप से सरल enums का उपयोग कर सकते हैं: 'सार्वजनिक enum Const {VALUE1, VALUE2} '। लेकिन बात यह है कि वे कक्षाएं हैं (कुछ pecularities के साथ), तो वे इस तरह उपयोग किया जाता है;) – fge