似乎可以在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
...
}
我已经尝试了这个,但是我遇到了编译器错误。
由于
答案 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)
enum TrafficLight {
RED,
GREEN;
@Override
public String toString() {
switch(this) {
case RED: return "abc";
case GREEN: return "def";
default: throw new IllegalArgumentException();
}
}
}
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";
}
}
}