¿Es posible extender enum en Java 8?

Simplemente jugando y se me ocurrió una manera dulce de agregar funcionalidad aenumpecadoMé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
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta