刚刚玩,并提出了一个甜蜜的方式来添加功能到
Java Enum toString() method与
this的枚举.
一些进一步的修补使我几乎可以增加一个整洁(即不抛出异常)反向查找,但有一个问题.报告:
error: valueOf(String) in X cannot implement valueOf(String) in HasValue
public enum X implements PoliteEnum,ReverseLookup {
overriding method is static
有办法吗
这里的目标是默认添加(通过一个默认方法,如我在链接的答案中添加了politeName)的一个接口实现一个没有抛出异常的valueOf函数的查找方法.可能吗?显然现在可以将枚举扩展为Java的一个主要问题,直到现在为止.
这是我失败的尝试:
public interface HasName {
public String name();
}
public interface PoliteEnum extends HasName {
default String politeName() {
return name().replace("_"," ");
}
}
public interface Lookup
{
public Q lookup(P p);
}
public interface HasValue {
HasValue valueOf(String name);
}
public interface ReverseLookup extends HasValue,Lookup {
@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
}