【发布时间】:2019-05-24 06:00:49
【问题描述】:
我正在学习枚举可以为我们提供的各种选项。我已经了解了其中的构造函数、方法和覆盖方法。
代码示例如下。
我有一个问题。
在这种情况下,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());
}
}
}
【问题讨论】:
-
请不要写这样的代码。
-
@ElliottFrisch Oopsie doopsie...编辑了它
-
不是二进制代码。这正是 Oracle Java 为合成成员命名的方式。
-
不过,这是一个有趣的问题,而且我以前从未见过。 1+
-
好吧,我承认这是一个棘手的问题,正如您从通常首先搜索重复项的知名用户那里得到答案的事实所证明的那样。不要为此感到难过——我知道要搜索什么,因为我知道答案。将像您这样的问题与副本相关联很重要,这样下一个人会更容易找到它!