Java 简明教程
Java - Enum Constructor
Java enum是 class 的一种特殊类型,它表示一组预定义的常量值,可用于 switch expressions 进行比较,作为应用程序代码中的常量使用。
默认情况下,一个 enum 不需要任何构造函数,其默认值与其声明相同。考虑以下示例:
enum WEEKDAY { MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, FRIDAY, SATURDAY, SUNDAY }
如果我们打印任何上述枚举的值,它将按照声明打印相同的字符串。
System.out.println(WEEKDAY.MONDAY);
它会按如下所示打印结果:
MONDAY
Use of Enum Constructor
在我们需要为枚举分配默认值的情况下,我们可以创建下述枚举结构器:
enum WEEKDAY {
MONDAY("Day 1");
private final String description;
WEEKDAY(String description) {
this.description = description;
}
}
在这种情况下,我们使用结构器为枚举分配一个默认描述。
Scope of Enum Constructor
由于枚举是一个特殊的类,因此枚举结构器只能具有 private 或 package-private 修饰符。设置 public 标识符会导致枚举结构器出现编译时间错误。
enum WEEKDAY {
MONDAY("Day 1");
private final String description;
// compiler error: illegal modifier, only private is permitted.
public WEEKDAY(String description) {
this.description = description;
}
}
以下是枚举结构器的有效声明
Enum with Private Constructor
我们可以按照下述方式为枚举创建 private 结构器。
enum WEEKDAY {
MONDAY("Day 1");
private final String description;
// valid declaration
private WEEKDAY(String description) {
this.description = description;
}
}
Example
在这个例子中,我们使用 private 结构器创建了一个枚举 WEEKDAY。使用 private 结构器,我们使用其结构器设置枚举描述的值。
package com.tutorialspoint;
// create the enum
enum WEEKDAY {
// create values of enum
MONDAY("Day 1"),
TUESDAY("Day 2"),
WEDNESDAY("Day 3"),
THRUSDAY("Day 4"),
FRIDAY("Day 5"),
SATURDAY("Day 6"),
SUNDAY("Day 7");
private final String description;
// private construtor to set default value
private WEEKDAY(String description) {
this.description = description;
}
// getter method to get the 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 with Package-private Constructor
我们可以按照下述方式为枚举创建 package-private 结构器。
enum WEEKDAY {
MONDAY("Day 1");
private final String description;
// valid declaration
WEEKDAY(String description) {
this.description = description;
}
}
Example
在这个例子中,我们创建了一个枚举 WEEKDAY,因为它未传递任何修饰符,因此它是一个 package-private 结构器。使用这个结构器,我们使用其结构器设置枚举描述的值。
package com.tutorialspoint;
// create the enum
enum WEEKDAY {
// create values of enum
MONDAY("Day 1"),
TUESDAY("Day 2"),
WEDNESDAY("Day 3"),
THRUSDAY("Day 4"),
FRIDAY("Day 5"),
SATURDAY("Day 6"),
SUNDAY("Day 7");
private final String description;
// private construtor to set default value
WEEKDAY(String description) {
this.description = description;
}
// getter method to get the 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