Можно ли расширить enum в Java 8?
Просто играть и придумал приятный способ добавить функциональностьenum
вJava Enum toString () метод сэтот.
Некоторые дальнейшие изменения позволили мнеоколо также добавьте аккуратный (то есть не исключая) обратный поиск, но есть проблема. Это сообщает:
error: valueOf(String) in X cannot implement valueOf(String) in HasValue
public enum X implements PoliteEnum, ReverseLookup {
overriding method is static
Есть ли способ?
Целью здесь является тихое добавление (через реализацию интерфейса сdefault
метод, как я добавилpoliteName
в связанном ответе)lookup
метод, который делаетvalueOf
Функция без исключения. Является ли это возможным? Теперь ясно, что можно расширитьenum
- одна из моих главных проблем с Java до сих пор.
Вот моя неудачная попытка:
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
}