Java枚举toString()方法
问题内容:
我有几个使用下划线分隔单词的Java枚举。在我的每个枚举中,我都有一个toString方法,该方法实现为super.toString()。replace(“ _”,“”),这样我就可以在GUI上显示String值而没有下划线。有什么办法可以让我的所有枚举都使用此toString方法,而不必在所有这些枚举之间重复?如果这是一个常规类,答案很简单,实现toString()然后让我所有需要该实现的类扩展该类,但枚举不能扩展任何东西,甚至不能扩展另一个枚举。
public enum Example1 {
HELLO_WORLD, HELLO_EARTH, HELLO_GLOBE
@Override public String toString() {
return super.toString().replace("_", " ");
}
}
public enum Example2 {
ANSWER_1, ANSWER_2, ANSWER_3
@Override public String toString() {
return super.toString().replace("_", " ");
}
}
有没有人的解决方案不能在所有枚举中都重复此toString()方法?
问题答案:
public static String toString(Enum<?> enumVal) {
return String.valueOf(enumVal).replace("_", " ");
}
用法:
String asString = toString(HELLO_WORLD);
要么,
String asString = toString(ANSWER_1);
类型安全方法:
public abstract class MyEnum<E extends MyEnum<E>> {
protected MyEnum(String name) {
this.name = name;
}
private String name;
protected String name() {
return name;
};
@Override
public final String toString() {
return name().replace("_", " ");
}
}
public final static class Example1 extends MyEnum<Example1> {
public static final Example1 HELLO_WORLD = new Example1("HELLO_WORLD");
protected Example1(String name) {
super(name);
}
}
用法:
System.out.println(Example1.HELLO_WORLD);