4

我正在通过一些代码使用nameJava Enum 的方法。

任何人都可以向我解释如何以及在哪里使用name()Java 中的 Enum 方法。

4

2 回答 2

7

鉴于:

enum Direction {
  NORTH("north"), SOUTH("south"), EAST("east"), WEST("west");

  private final String printableValue;

  Direction(String printableValue) {
    this.printableValue = printableValue;
  }

  @Override
  public String toString() {
    return printableValue;
  }
}

然后这段代码:

Direction travelDirection = Direction.NORTH;
System.out.println("I am going " + travelDirection);

将打印

I am going north

但是这段代码:

Direction travelDirection = Direction.NORTH;
System.out.println("I am going " + travelDirection.name());

将打印

I am going NORTH
于 2012-08-03T10:51:54.967 回答
3

这个name()方法很像toString(),只是它被声明为final,所以枚举定义不能改变它。这可能很重要,例如在编写框架来序列化数据时,您必须依赖枚举的名称是唯一标识常量的单个 Java 标识符这一事实。可能还有更多应用程序,但正如手册所说:

大多数程序员应该toString()优先使用该方法,因为 toString 方法可能会返回一个对用户更友好的名称。

一般来说,我会说你应该toString()在输出用于人类读者时使用,并且name()当它针对以某种方式解析的另一个进程时使用。

于 2012-08-03T10:52:41.347 回答