Java 简明教程

Java - Enum Constructor

Java enumclass 的一种特殊类型,它表示一组预定义的常量值,可用于 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