Java 枚举是一种特殊的类,它表示一组预定义的常量值,并且可以在应用程序代码中作为常量使用,在 switch
表达式中进行比较。
默认情况下,枚举不需要任何构造器,其默认值与其声明相同。请看以下示例:
enum WEEKDAY { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
如果我们打印上述枚举的任何一个值,它将打印与声明相同的字符串。
System.out.println(WEEKDAY.MONDAY);
输出结果如下:
MONDAY
使用枚举构造器
如果我们要给枚举分配一个默认值,我们可以创建一个枚举构造器,如下所示:
enum WEEKDAY {
MONDAY("Day 1");
private final String description;
WEEKDAY(String description) {
this.description = description;
}
}
在这种情况下,我们正在使用构造器为枚举分配一个默认的描述。
枚举构造器的作用域
由于枚举是一个特殊的类,枚举构造器只能有私有(private
)或包私有(无修饰符)的修饰符。将枚举构造器设置为 public
将会在编译时产生错误。
enum WEEKDAY {
MONDAY("Day 1");
private final String description;
public WEEKDAY(String description) {
this.description = description;
}
}
下面是枚举构造器的有效声明:
带私有构造器的枚举
我们可以为枚举创建一个私有构造器,如下所示:
enum WEEKDAY {
MONDAY("Day 1");
private final String description;
private WEEKDAY(String description) {
this.description = description;
}
}
示例
在下面的示例中,我们创建了一个带有私有构造器的枚举 WEEKDAY
。使用私有构造器,我们在构造器中设置了枚举描述的值。
package com.tutorialspoint;
enum WEEKDAY {
MONDAY("Day 1"),
TUESDAY("Day 2"),
WEDNESDAY("Day 3"),
THURSDAY("Day 4"),
FRIDAY("Day 5"),
SATURDAY("Day 6"),
SUNDAY("Day 7");
private final String description;
private WEEKDAY(String description) {
this.description = description;
}
public String getDescription () {
return this.description;
}
}
public class Tester {
public static void main(String[] args) {
System.out.println(WEEKDAY.MONDAY.getDescription());
System.out.println(WEEKDAY.MONDAY);
}
}
编译并运行上述程序,会产生以下结果:
Day 1
MONDAY
带包私有构造器的枚举
我们可以为枚举创建一个包私有构造器,如下所示:
enum WEEKDAY {
MONDAY("Day 1");
private final String description;
WEEKDAY(String description) {
this.description = description;
}
}
示例
在下面的示例中,我们创建了一个带有包私有构造器的枚举 WEEKDAY
,没有传递任何修饰符。使用此构造器,我们在构造器中设置了枚举描述的值。
package com.tutorialspoint;
enum WEEKDAY {
MONDAY("Day 1"),
TUESDAY("Day 2"),
WEDNESDAY("Day 3"),
THURSDAY("Day 4"),
FRIDAY("Day 5"),
SATURDAY("Day 6"),
SUNDAY("Day 7");
private final String description;
WEEKDAY(String description) {
this.description = description;
}
public String getDescription () {
return this.description;
}
}
public class Tester {
public static void main(String[] args) {
System.out.println(WEEKDAY.MONDAY.getDescription());
System.out.println(WEEKDAY.MONDAY);
}
}
编译并运行上述程序,会产生以下结果:
Day 1
MONDAY
请注意,"THURSDAY" 在之前的示例中被误拼写为 "THRUSDAY",正确的拼写应该是 "THURSDAY"。