2013-10-01 3 views
6

जब मैं अपने जावा एनम डे को संकलित करता हूं, तो यह उसकी डे.क्लास फ़ाइल और 8 दिन $ # कक्षा फाइल जेनरेट करता है, इसलिए मैं जानना चाहता हूं कि संकलक 7 की बजाय 8 $ # कक्षा क्यों उत्पन्न करता है, क्योंकि मेरे पास 7 enum स्थिरांक हैं , लेकिन 8 एनोटेशन को ओवरराइड करते हैं, मैंने समझा है कि डॉलर.क्लास फाइलें हर आंतरिक वर्ग या एनम स्थिरांक द्वारा उत्पन्न की जाती हैं, लेकिन आठ .class फ़ाइल के बारे में क्या है जिसके लिए यह उत्पन्न होता है?

package com.kaissersoft.test.objective.one.three.enums; 

public enum Day{ 
    SUNDAY(01){ 
    @Override 
    public void salute(){ 
     System.out.println("Today is Sunday"); 
    } 
}, 
MONDAY(02){ 
    @Override 
    public void salute(){ 
     System.out.println("Today is Monday"); 
    } 
}, 
TUESDAY(03){ 
    @Override 
    public void salute(){ 
     System.out.println("Today is Tuesday"); 
    } 
}, 
WEDNESDAY(04){ 
    @Override 
    public void salute(){ 
     System.out.println("Today is Wednesday"); 
    } 
}, 
THURSDAY(05){ 
    @Override 
    public void salute(){ 
     System.out.println("Today is Thursday"); 
    } 
}, 
FRIDAY(06){ 
    @Override 
    public void salute(){ 
     System.out.println("Today is Friday"); 
    } 
}, 
SATURDAY(07){ 
    @Override 
    public void salute(){ 
     System.out.println("Today is Saturday"); 
    } 
}; 

int dayNumber; 
Day(final int day){ 
    dayNumber = day; 
} 

public int getDayNumber(){ 
    return dayNumber; 
} 

@Override 
public String toString(){ 

    switch(this){ 
     case SUNDAY: 
      System.out.println("Sunday("+this.getDayNumber()+")"); 
      break; 
     case MONDAY: 
      System.out.println("Monday("+this.getDayNumber()+")"); 
      break; 
     case TUESDAY: 
      System.out.println("Tuesday"+this.getDayNumber()+")"); 
      break; 
     case WEDNESDAY: 
      System.out.println("Wednesday("+this.getDayNumber()+")"); 
      break; 
     case THURSDAY: 
      System.out.println("Thursday("+this.getDayNumber()+")"); 
      break; 
     case FRIDAY: 
      System.out.println("Friday("+this.getDayNumber()+")"); 
      break; 
     case SATURDAY: 
      System.out.println("Saturday("+this.getDayNumber()+")"); 
      break; 
    } 
    return super.toString(); 
} 

//Abstract method to the day Salute 
public abstract void salute(); 
} 

और यह उत्पन्न करता है:

  • Day.class
  • डे $ 1.class
  • डे $ 2.class
  • डे $ 3.class
  • डे $ 4.class
  • दिन $ 5.class
  • दा y $ 6.class
  • डे $ 7.class
  • डे $ 8.class
+0

@ सॉटिरियोसेलिमैनोलिस वास्तव में नहीं, सज्जन यहां जानते हैं कि नाम में डॉलर के हस्ताक्षर वाले वर्ग क्या हैं, वह कुछ और पूछ रहा है। –

+5

(आप जानते हैं कि आप वहां ऑक्टल स्थिरांक का उपयोग कर रहे हैं?) –

+0

मैं कंपाइलर के साथ खेल रहा था और मैंने टॉस्ट्रिंग ओवरराइड के अंदर स्विच को घटा दिया है और यह 7 .class फ़ाइलों को उत्पन्न करता है, इसलिए मुझे लगता है कि आठ एक enum द्वारा उत्पन्न होता है स्विच ?? किसी को पता है कि यह जवाब है या नहीं? – Eefret

उत्तर

1

प्रत्येक एनम शाब्दिक द्वारा एनम के नाम से पहचाना जाने वाला वर्ग उत्पन्न होता है, साथ ही एनम शाब्दिक की अनुक्रमणिका, यह सब एनम जेनरेटेड क्लास के अलावा, प्रत्यय 8 के साथ enum क्लास स्विचमैप नामक एक मानचित्र है एक नक्शा जो स्विच द्वारा उपयोग किए जाने वाले एनम शाब्दिक सूचकांक के संदर्भ को बनाए रखता है, यदि आप इस कोड को उत्साहित करते हैं तो आप इसे देख सकते हैं।

 try{ 
      Class<?> c = Class.forName("com.kaissersoft.test.objective.one.three.enums.Days$8"); 

      Field[] fs= c.getDeclaredFields(); 
      for(Field f: fs){ 
      System.out.println(f.toString()); 
      } 
     }catch(ClassNotFoundException cne){ 
      cne.printStackTrace(); 
     } 


// Output 
static final int[] com.kaissersoft.test.objective.one.three.enums.Days$8.$Switch 
Map$com$kaissersoft$test$objective$one$three$enums$Days 
+0

काफी अच्छी तरह उत्तर दिया – Eefret

0

मैं बस की नकल की और अपने कोड और मेरे मशीन पर परिणाम तैयार की है निम्नलिखित है:

  • दिवस। वर्ग
  • डे $ 1.class
  • डे $ 2.class
  • डे $ 3.class
  • डे $ 4.class
  • डे $ 5.class
  • डे $ 6.class
  • डे $ 7.class

नहीं Day$8.class बनाया गया है। हो सकता है कि आपके पास 8 आंतरिक कक्षाएं हों, आपने संकलित किया और फिर आपने एक को हटा दिया ... टेक्स्ट संपादक के साथ .class फ़ाइलों को खोलने का प्रयास करें, आप पठनीय पात्रों से कुछ और समझ सकते हैं ... उदाहरण के लिए मेरे Day$1.class मैं पाठ "आज रविवार है" पढ़ सकते हैं।

+1

यह संकलक निर्भर हो सकता है। –

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