在Java枚举上实现toString

时间:2010-03-23 04:10:31

标签: java enums

似乎可以在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
  ...
 }

我已经尝试了这个,但是我遇到了编译器错误。

由于

4 个答案:

答案 0 :(得分:91)

您可以按照以下方式执行此操作:

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基本上是class,具有一定数量的实例。

答案 1 :(得分:65)

答案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; }
}

答案 2 :(得分:12)

此外,如果你需要获得枚举的小写字符串值(“红色”,“绿色”),你可以按如下方式进行:

private enum TrafficLight {
  RED,
  GREEN;

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

答案 3 :(得分:2)

我喜欢这种选择性替代 toString() 的方法,如果它对任何人都有用:

private enum TrafficLight {
  RED,
  GREEN {
    @Override
    public String toString() {
        return "GREEN-ISH";
    }
  }
}