我正在通过一些代码使用nameJava Enum 的方法。
任何人都可以向我解释如何以及在哪里使用name()Java 中的 Enum 方法。
鉴于:
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
这个name()方法很像toString(),只是它被声明为final,所以枚举定义不能改变它。这可能很重要,例如在编写框架来序列化数据时,您必须依赖枚举的名称是唯一标识常量的单个 Java 标识符这一事实。可能还有更多应用程序,但正如手册所说:
大多数程序员应该
toString()优先使用该方法,因为 toString 方法可能会返回一个对用户更友好的名称。
一般来说,我会说你应该toString()在输出用于人类读者时使用,并且name()当它针对以某种方式解析的另一个进程时使用。