Ist es möglich, Enum in Java 8 zu erweitern?
Einfach nur spielen und eine süße Möglichkeit gefunden, die Funktionalität zu erweiternenum
s 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
}