因为所有静态字段(包括表示枚举值的静态字段)都是按文本顺序初始化的,并且枚举值始终位于其他字段之前,所以在初始化静态字段之前会调用构造函数。请注意,在你的类示例中,你没有显示ABBREV_MAP的初始化位置-如果在 SUNDAY 之后,则在初始化类时会出现异常。
是的,这有点痛苦,可能设计得更好。
但是,根据我的经验,通常的答案是
static {}在所有静态初始化程序的末尾添加一个块,然后在其中进行所有静态初始化,EnumSet.allOf以获取所有值。

因为所有静态字段(包括表示枚举值的静态字段)都是按文本顺序初始化的,并且枚举值始终位于其他字段之前,所以在初始化静态字段之前会调用构造函数。请注意,在你的类示例中,你没有显示ABBREV_MAP的初始化位置-如果在 SUNDAY 之后,则在初始化类时会出现异常。
是的,这有点痛苦,可能设计得更好。
但是,根据我的经验,通常的答案是
static {}在所有静态初始化程序的末尾添加一个块,然后在其中进行所有静态初始化,EnumSet.allOf以获取所有值。