Реализация toString на Java перечислениях
Кажется, на 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" - зеленым. Кроме того, возможно ли сделать это на С#, где вы можете это сделать:
private enum TrafficLight {
RED = 0,
GREEN = 15
...
}
Я пробовал это, но это, но я получаю с ним ошибки компилятора.
Спасибо
Ответы
Ответ 1
Ans 1:
enum TrafficLight {
RED,
GREEN;
@Override
public String toString() {
switch(this) {
case RED: return "abc";
case GREEN: return "def";
default: throw new IllegalArgumentException();
}
}
}
Ans 2:
enum TrafficLight {
RED(0),
GREEN(15);
int value;
TrafficLight(int value) { this.value = value; }
}
Ответ 2
Вы можете сделать это следующим образом:
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
.
An enum
в Java - это в основном class
, у которого есть определенное количество экземпляров.
Ответ 3
Также, если вам нужно получить строковое значение нижнего регистра перечисления ( "красный", "зеленый" ), вы можете сделать это следующим образом:
private enum TrafficLight {
RED,
GREEN;
@Override
public String toString() {
return super.toString().toLowerCase();
}
}