我想为我的枚举toString()
覆盖Color
。但是,我无法弄清楚如何在Color
枚举中获取Color
实例的值。有没有办法在Java中做到这一点?
示例:
public enum Color {
RED,
GREEN,
BLUE,
...
public String toString() {
// return "R" for RED, "G", for GREEN, etc.
}
}
答案 0 :(得分:17)
public enum Color {
RED("R"),
GREEN("G"),
BLUE("B");
private final String str;
private Color(String s){
str = s;
}
@Override
public String toString() {
return str;
}
}
您可以为Enums使用构造函数。我没有测试语法,但这是个主意。
答案 1 :(得分:15)
您也可以启用this
的类型,例如:
public enum Foo {
A, B, C, D
;
@Override
public String toString() {
switch (this) {
case A: return "AYE";
case B: return "BEE";
case C: return "SEE";
case D: return "DEE";
default: throw new IllegalStateException();
}
}
}
答案 2 :(得分:4)
Enum.name()
- 谁会砸它?
但是,在大多数情况下,将任何额外信息保存在构造函数中设置的实例变量中更有意义。
答案 3 :(得分:3)
使用super
和String.substring()
:
public enum Color
{
RED,
GREEN,
BLUE;
public String toString()
{
return "The color is " + super.toString().substring(0, 1);
}
}
答案 4 :(得分:0)
Java默认为你做这个,它返回.toString()中的.name(),你只需要覆盖toString(),如果你想从名称中得到一些不同的东西。有趣的方法是.name()和.ordinal()和.valueOf()。
做你想做的事情
.toString(this.name().substring(1));
您可能要做的是添加一个名为abbreviation的属性并将其添加到构造函数中,添加一个getAbbreviation()并使用它来代替.toString()
答案 5 :(得分:0)
我发现了这样的东西(未经过测试):
public enum Color {
RED{
public String toString() {
return "this is red";
}
},
GREEN{
public String toString() {
return "this is green";
}
},
...
}
希望它有所帮助!