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.クラス