是否可以在 Java 8 中扩展枚举?
只是玩,并想出了一个甜蜜的方式,用这个在Java Enum toString()方法中添加功能。enum
一些进一步的修补使我几乎可以添加一个整洁的(即不抛出异常)反向查找,但有一个问题。它报告:
error: valueOf(String) in X cannot implement valueOf(String) in HasValue
public enum X implements PoliteEnum, ReverseLookup {
overriding method is static
有没有办法?
这里的目的是静默地添加(通过接口实现,使用我在链接的答案中添加的方法)一个在不引发异常的情况下执行该函数的方法。可能吗?现在显然可以扩展 - 直到现在,我在Java方面的主要问题之一。default
politeName
lookup
valueOf
enum
这是我失败的尝试:
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
}