7

Java Enum Day をコンパイルすると、彼の Day.class ファイルと 8 つの Day$#.class ファイルが生成されるため、7 つの列挙定数があるため、コンパイラが 7 ではなく 8 つの $#.class を生成する理由を知りたいのですが、 8 つのオーバーライド アノテーション、Dollar.class ファイルが内部クラスごとに、または列挙型定数によって生成されることは理解していますが、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$1.クラス
  • Day$2.クラス
  • Day$3.クラス
  • 1日$4.クラス
  • 1日$5.クラス
  • 1日$6.クラス
  • Day$7.クラス
  • 1日$8.クラス
4

2 に答える 2

1

コードをコピーしてコンパイルしたところ、私のマシンでの結果は次のようになりました。

  • 日.クラス
  • Day$1.クラス
  • Day$2.クラス
  • Day$3.クラス
  • 1日$4.クラス
  • 1日$5.クラス
  • 1日$6.クラス
  • Day$7.クラス

作成されていませんDay$8.class。たぶん、あなたは8つの内部クラスの前にコンパイルしてから1つを削除しました...テキストエディタで.classファイルを開こうとすると、読み取り可能な文字からもっと何かを理解できます...たとえば、Day$1.class私は読むことができます「今日は日曜日です」というテキスト。

于 2013-10-01T14:25:22.040 に答える