java 定义枚举类型

java定义枚举类型时,下面两种写法的区别是什么?请解释下第二种写法为什么是函数形式?

(一 )
public enum WeekDay{
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}

(二)
public enum WeekDay{
Monday("Mon"), Tuesday("Tues"), Wednesday("Wed"), Thursday("Thur"), Friday("Fri"), Saturday("Sat"), Sunday("Sun");}

第一种写法定义了一个简单的枚举类型,其中每个枚举常量的名字是该常量的唯一标识符。

而第二种写法是定义了一个带有属性的枚举类型。这些属性被定义在枚举常量的括号中,并通过构造函数进行初始化。在这种情况下,枚举常量不仅仅是一个常量名称,它还有一个值。

这种定义方式通常用于需要把一些自定义属性关联到每个枚举常量上的场景。例如,在第二种写法中,对于每一个星期几的枚举常量,都与一个表示缩写的字符串相关联。因此,我们可以通过WeekDay.Monday.name()返回Mon,通过 WeekDay.Monday.toString() 返回Monday。

需要注意的是,第二种写法中的属性需要通过构造函数进行初始化。所以,第二种写法看起来像是一个方法,实际上是一个构造函数,用来将字段初始化为指定的值。

实际上第二种写法有问题,它少了一个构造函数,正确应该是这样:

public enum WeekDay {
    Monday("Mon"),
    Tuesday("Tues"),
    Wednesday("Wed"),
    Thursday("Thur"),
    Friday("Fri"),
    Saturday("Sat"),
    Sunday("Sun");

    private String day;

    WeekDay(String day) {
        this.day = day;
    }
}

第二种比第一种要多一个值,表达的意思可以更多