在 Java 枚举上实现 toString答 1:答 2:

2022-08-31 14:49:44

在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

您可以按如下方式进行操作:

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


答案 2

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