Ist es möglich, Enum in Java 8 zu erweitern?

Einfach nur spielen und eine süße Möglichkeit gefunden, die Funktionalität zu erweiternenums inJava Enum toString () -Methode mitdiese.

Weiteres Basteln erlaubte es mirfast Fügen Sie auch eine ordentliche (d. h. keine Ausnahme auslösende) Rückwärtssuche hinzu, aber es gibt ein Problem. Es berichtet:

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

Gibt es einen Weg?

Das Ziel hier ist, stillschweigend hinzuzufügen (über eine Schnittstellenimplementierung mit adefault Methode, wie ich hinzugefügt habepoliteName in der verknüpften Antwort) alookup Methode, die das tutvalueOf Funktion, ohne eine Ausnahme auszulösen. Ist es möglich? Es ist jetzt eindeutig möglich zu verlängernenum - eines meiner größten Probleme mit Java bis jetzt.

Hier ist mein gescheiterter Versuch:

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
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage