Est-il possible d'étendre enum dans Java 8?

Juste à jouer et est venu avec une façon agréable d'ajouter des fonctionnalités à enums dans Java Enum méthode toString() avec cette.

Quelques bricolage m'a permis de près de également ajouter une rangée (c'est à dire de ne pas jeter une exception) à rétro-interroger, mais il y a un problème. C'est de déclaration:

error: valueOf(String) in X cannot implement valueOf(String) in HasValue
public enum X implements PoliteEnum, ReverseLookup {
overriding method is static

Est-il un moyen?

Le but ici est de faire en silence ajouter (via une interface de mise en œuvre avec une default méthode comme j'ai ajouté politeName dans la réponse) a lookup méthode qui ne le valueOf fonction sans lancer une exception. Est-il possible? Il est clair maintenant possible d'étendre enum - l'un de mes principaux problèmes avec Java jusqu'à maintenant.

Voici ma tentative a échoué:

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
}

source d'informationauteur OldCurmudgeon