Реализация toString в перечислениях Java - PullRequest
45 голосов
/ 23 марта 2010

Кажется возможным в 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
  ...
 }

Я пробовал это, но это, но я получаю ошибки компиляции с ним.Спасибо

Ответы [ 3 ]

91 голосов
/ 23 марта 2010

Вы можете сделать это следующим образом:

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.

. * * * * * enum в Java - это, по сути, class, который имеет заданное количество экземпляров.

65 голосов
/ 23 марта 2010

Ответ 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; }
}
12 голосов
/ 04 февраля 2016

Также, если вам нужно получить строковое значение enum («красный», «зеленый»), вы можете сделать это следующим образом:

private enum TrafficLight {
  RED,
  GREEN;

  @Override
  public String toString() {
   return super.toString().toLowerCase();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...