在Java枚举上实现toString

Java似乎有可能写这样的东西:

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#,你可以做到这一点?

  private enum TrafficLight { RED = 0, GREEN = 15 ... } 

我试过这个,但它,但我得到编译器错误。

谢谢

答案1:

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

答2:

 enum TrafficLight { RED(0), GREEN(15); int value; TrafficLight(int value) { this.value = value; } } 

你可以这样做:

 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中的enum基本上是一个具有一定数量实例的类。

另外,如果您需要获取枚举的小写string值(“红色”,“绿色”)您可以这样做,如下所示:

 private enum TrafficLight { RED, GREEN; @Override public String toString() { return super.toString().toLowerCase(); } }