玩闹间,我找到了一种为Java中的enum
添加功能的甜美方法,即使用Java Enum toString()方法和这个答案。
进一步的尝试让我 几乎 成功地添加了一个整洁(即不会抛出异常)的反向查找,但是有一个问题。它报告:
error: valueOf(String) in X cannot implement valueOf(String) in HasValue
public enum X implements PoliteEnum, ReverseLookup {
overriding method is static
有办法吗?
这里的目标是通过实现一个界面(类似于我在链接回答中添加的politeName
)默默地添加一个lookup
方法,该方法可以执行valueOf
函数而不会引发异常。 这是可能的吗?现在显然可以扩展枚举-这是我之前在Java中遇到的主要问题之一。
这是我的失败尝试:
public interface HasName {
public String name();
}
public interface PoliteEnum extends HasName {
default String politeName() {
return name().replace("_", " ");
}
}
public interface Lookup<P, Q> {
public Q lookup(P p);
}
public interface HasValue {
HasValue valueOf(String name);
}
public interface ReverseLookup extends HasValue, Lookup<String, HasValue> {
@Override
default HasValue lookup(String from) {
try {
return valueOf(from);
} catch (IllegalArgumentException e) {
return null;
}
}
}
public enum X implements PoliteEnum/* NOT ALLOWED :( , ReverseLookup*/ {
A_For_Ism, B_For_Mutton, C_Forth_Highlanders;
}
public void test() {
// Test the politeName
for (X x : X.values()) {
System.out.println(x.politeName());
}
// ToDo: Test lookup
}
valueOf
是static
,因此无法被覆盖。我猜需要完全不同的方法。 - OldCurmudgeonlookup
吗? - Sotirios Delimanolis