在Java枚举上实现toString

Implementing toString on Java enums

在Java中编写这样的东西似乎是可能的:

1
2
3
4
5
6
7
8
9
 private enum TrafficLight {
  RED,
  GREEN;

  public String toString() {
   return //what should I return here if I want to return
                               //"abc" when red and"def" when green?
  }
 }

现在,我想知道在枚举值为红色时是否可以返回ToString方法"abc",在枚举值为绿色时是否可以返回"def"。此外,是否可以像C中那样做,在那里您可以做到这一点?:

1
2
3
4
5
 private enum TrafficLight {
  RED = 0,
  GREEN = 15
  ...
 }

我已经试过了,但它有编译错误。

谢谢


您可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private enum TrafficLight {
   // using the constructor defined below
   RED("abc"),
   GREEN("def");

   // Member to hold the name
   private String string;

   // constructor to set the string
   TrafficLight(String name){string = name;}

   // the toString just returns the given name
   @Override
   public String toString() {
       return string;
   }
}

您可以添加任意多的方法和成员。我相信您甚至可以添加多个构造函数。所有施工人员必须是private

在Java中EDCOX1的1个基本上是一个EDCOX1,2个,它有一个集合的实例。


ANS 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
enum TrafficLight {
  RED,
  GREEN;

  @Override
  public String toString() {
    switch(this) {
      case RED: return"abc";
      case GREEN: return"def";
      default: throw new IllegalArgumentException();
    }
  }
}

ANS 2:

1
2
3
4
5
6
7
enum TrafficLight {
  RED(0),
  GREEN(15);

  int value;
  TrafficLight(int value) { this.value = value; }
}


另外,如果您需要获取枚举的小写字符串值("red"、"green"),您可以按如下方式执行:

1
2
3
4
5
6
7
8
9
private enum TrafficLight {
  RED,
  GREEN;

  @Override
  public String toString() {
   return super.toString().toLowerCase();
  }
}