¿Es posible extender enum en Java 8?
Simplemente jugando y se me ocurrió una manera dulce de agregar funcionalidad aenum
pecadoMétodo Java Enum toString () conesta.
Algunos retoques adicionales me permitieroncasi También agregue una búsqueda inversa ordenada (es decir, sin lanzar una excepción), pero hay un problema. Está informando:
error: valueOf(String) in X cannot implement valueOf(String) in HasValue
public enum X implements PoliteEnum, ReverseLookup {
overriding method is static
¿Hay alguna manera?
El objetivo aquí es agregar silenciosamente (a través de una implementación de interfaz con undefault
método como agreguépoliteName
en la respuesta vinculada) alookup
método que hace elvalueOf
funcionar sin lanzar una excepción. ¿Es posible? Claramente ahora es posible extenderenum
- Uno de mis principales problemas con Java hasta ahora.
Aquí está mi intento fallido:
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
}