java getClass()在枚举中使用构造函数时打印二进制格式
我正在学习枚举可以为我们提供的各种选项。我已经了解了其中的构造函数、方法和重写方法
下面是代码示例
不过我有一个问题
在这种情况下,getClass()
返回类enumData.WeekEnumElaborate$1
、enumData.WeekEnumElaborate$2
等等,直到enumData.WeekEnumElaborate$8
但是,如果枚举是一个简单的枚举,并且只声明了常量,getClass()
返回enumData.WeekEnumElaborate
请给我解释一下这个二进制符号
这是我定义的枚举
package enumData;
public enum WeekEnumElaborate {
SUNDAY("SUN") {
public String getDescription() {
return this.getShortForm().concat(" Funday");
}
},
MONDAY("MON") {
public String getDescription() {
return this.getShortForm().concat(" Moot");
}
};
private final String shortForm;
private WeekEnumElaborate(String shortForm) {
this.shortForm = shortForm;
}
public String getShortForm(){
eturn this.shortForm.toLowerCase();
}
public abstract String getDescription();
}
这是我正在测试的一个类
package enumData;
public class TestWeekEnumElaborate {
public static void main(String[] args) {
WeekEnumElaborate[] days = WeekEnumElaborate.values();
for (WeekEnumElaborate day : days) {
System.out.println(day.name());
System.out.println(day.getClass());
System.out.println(day.getDeclaringClass());
}
}
}
# 1 楼答案
当给外部枚举类赋予枚举不同的行为时,实际上是在定义一个匿名静态内部类,它是基本枚举类的子类
这些嵌套类的名称的命名方式与匿名内部类的命名方式相同。Ie外部类+$+计数器
这允许每个枚举对同一签名有不同的方法实现
# 2 楼答案
您当前正在
enum
定义中定义匿名内部类,这是我在要求您编写这样的代码时提到的部分。更详细地说,我实现原始enum
的方式如下不需要匿名类,而且它明显更短,更容易推理