我有几个使用下划线来分隔单词的Java枚举.在我的每个枚举中,我有一个toString方法,它实现为super.toString().replace("_",""),这样我就可以在没有下划线的GUI上显示字符串值.有没有什么方法可以让我的所有枚举使用这个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("_", " ");
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人有一个解决方案,不会在所有枚举中复制这个toString()方法?
在Java 8中,我们可以使用接口来引入方法,因此您现在可以通过一种继承形式实际向枚举添加功能.
public interface HasName {
public String name();
}
public interface PoliteEnum extends HasName {
default String politeName() {
return name().replace("_", " ");
}
}
public enum X implements PoliteEnum {
A_For_Ism, B_For_Mutton, C_Forth_Highlanders;
}
public void test() {
for (X x : X.values()) {
System.out.println(x.politeName());
}
}
Run Code Online (Sandbox Code Playgroud)
版画
A For Ism
B For Mutton
C Forth Highlanders
Run Code Online (Sandbox Code Playgroud)
我承认它不像重写那样整洁,toString
因为你不能覆盖一个Object
方法,default
但它肯定会让你enum
整洁.
归档时间: |
|
查看次数: |
4047 次 |
最近记录: |