Java 枚举方法

Java面向对象设计 - Java枚举方法


因为枚举类型实际上是一个类类型,所以我们可以在枚举类型体中声明一切,我们可以在类体中声明它。

以下代码使用字段,构造函数和方法定义了一个级别枚举。

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参数。它将其参数的值存储在实例变量中。

我们可以向枚举类型添加多个构造函数。

我们不能向枚举类型添加公共或受保护的构造函数。

级别枚举声明一个公共方法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);
    }
  }
}

上面的代码生成以下结果。