【问题标题】:why is <filename>$1.class generated? [duplicate]为什么生成 <filename>$1.class? [复制]
【发布时间】:2015-06-16 01:25:14
【问题描述】:
enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}  

class Enum1 {  

  public static void main(String args[]) {  

    Day day=Day.MONDAY;  

    switch(day) {  
      case SUNDAY:   
        System.out.println("sunday");  
        break;  
      case MONDAY:   
        System.out.println("monday");  
        break;  
      default:  
        System.out.println("other day");
    }
  }
}

我在编译这段代码时看到了Enum1.classDay.classEnum1$1.class。当我注释掉 switchcase 部分时,只会生成 Enum1.classDay.class

switchcase 中产生额外Enum1$1.class 文件的原因是什么?

【问题讨论】:

标签: java class enums switch-statement


【解决方案1】:

在包de.lhorn中的类上使用javap

Day.class

public final class de.lhorn.so.Day extends java.lang.Enum<de.lhorn.so.Day> {
  public static final de.lhorn.so.Day SUNDAY;
  public static final de.lhorn.so.Day MONDAY;
  public static final de.lhorn.so.Day TUESDAY;
  public static final de.lhorn.so.Day WEDNESDAY;
  public static final de.lhorn.so.Day THURSDAY;
  public static final de.lhorn.so.Day FRIDAY;
  public static final de.lhorn.so.Day SATURDAY;
  public static de.lhorn.so.Day[] values();
  public static de.lhorn.so.Day valueOf(java.lang.String);
  static {};
}

Enum1.class

public class de.lhorn.so.Enum1 {
  public de.lhorn.so.Enum1();
  public static void main(java.lang.String[]);
}

Enum$1.class

class de.lhorn.so.Enum1$1 {
  static final int[] $SwitchMap$de$lhorn$so$Day;
  static {};
}

所以switch 导致javac 生成额外的static final int[] $SwitchMap$de$lhorn$so$Day;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多