因为枚举类型实际上是一个类,所以可在枚举类型体中声明一切,也可在类体中声明它。
以下代码使用字段,构造函数和方法定义了一个名为 Level
的枚举。
public enum Level { LOW(30), MEDIUM(15), HIGH(7), URGENT(1); // Declare an instance variable private int levelValue; // Declare a private constructor private Level(int levelValue) { this.levelValue = levelValue; } public int getLevelValue() { return levelValue; } }
上面的代码声明了一个实例变量levelValue
,它将为每个枚举常量存储一个值。它还定义了一个私有构造函数,它接受一个int
参数。 它将其参数的值存储在实例变量中。
可以向枚举类型添加多个构造函数。但不能向枚举类型添加公共或受保护的构造函数。
Level
枚举中声明一个公共方法getLevelValue()
。枚举常量声明已更改为 -
LOW(30), MEDIUM(15), HIGH(7), URGENT(1);
现在每个枚举常量名称后面都跟着括号中的整数值。LOW(30)
是调用int
参数类型的构造函数的缩写。当创建枚举常量时,括号中的值将被传递给添加的构造函数。LOW
调用默认的无参数构造函数,而LOW(30)
调用有参数的构造函数。
以下代码测试Level
枚举类型。它打印常量的名称,序数值和它们的下划线值。
enum Level { LOW(30), MEDIUM(15), HIGH(7), URGENT(1); // Declare an instance variable private int levelValue; // Declare a private constructor private Level(int levelValue) { this.levelValue = levelValue; } public int getLevelValue() { return levelValue; } } public class Main { public static void main(String[] args) { for (Level s : Level.values()) { String name = s.name(); int ordinal = s.ordinal(); int underLine = s.getLevelValue(); System.out.println("name=" + name + ", ordinal=" + ordinal + ", underLine=" + underLine); } } }
上面的代码生成以下结果。
name=LOW, ordinal=0, underLine=30 name=MEDIUM, ordinal=1, underLine=15 name=HIGH, ordinal=2, underLine=7 name=URGENT, ordinal=3, underLine=1