在Enum中使用构造函数时,getClass()打印二进制格式

时间:2018-12-25 17:00:29

标签: java enums classname

我正在学习枚举可以提供给我们的各种选择。我已经了解了其中的构造函数,方法和重写方法。

代码示例如下。

我有一个问题。

在这种情况下,getClass()返回类enumData.WeekEnumElaborate$1enumData.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());
    }

}

}

2 个答案:

答案 0 :(得分:4)

当您给外部枚举类赋予不同的枚举行为时,您实际上是在定义一个匿名的静态内部类,该内部静态类是基枚举类的子类。

这些嵌套类的名称的命名方法与匿名内部类的命名方法相同。即外部类+ $ +计数器。

这允许每个枚举为同一签名具有不同的方法实现。

答案 1 :(得分:1)

您当前正在handler(this); 定义中定义匿名内部类,这是我要求您编写这样的代码时所指的部分。详细说来,我实施原始enum的方式类似于

enum

不需要匿名类,并且它明显更短并且更容易推理。

相关问题