Implementing toString on Java enums
在Java中编写这样的东西似乎是可能的:
1 2 3 4 5 6 7 8 9 | 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中那样做,在那里您可以做到这一点?:
1 2 3 4 5 | private enum TrafficLight { RED = 0, GREEN = 15 ... } |
我已经试过了,但它有编译错误。
谢谢
您可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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; } } |
您可以添加任意多的方法和成员。我相信您甚至可以添加多个构造函数。所有施工人员必须是
在Java中EDCOX1的1个基本上是一个EDCOX1,2个,它有一个集合的实例。
ANS 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 | enum TrafficLight { RED, GREEN; @Override public String toString() { switch(this) { case RED: return"abc"; case GREEN: return"def"; default: throw new IllegalArgumentException(); } } } |
ANS 2:
1 2 3 4 5 6 7 | enum TrafficLight { RED(0), GREEN(15); int value; TrafficLight(int value) { this.value = value; } } |
另外,如果您需要获取枚举的小写字符串值("red"、"green"),您可以按如下方式执行:
1 2 3 4 5 6 7 8 9 | private enum TrafficLight { RED, GREEN; @Override public String toString() { return super.toString().toLowerCase(); } } |