É possível estender enum no Java 8?
Apenas tocando e surgiu uma maneira interessante de adicionar funcionalidade aoenum
pecadoMétodo Java Enum toString () comesta.
Alguns ajustes adicionais me permitirampor pouco adicione também uma pesquisa inversa organizada (por exemplo, não lançando uma exceção), mas há um problema. Está relatando:
error: valueOf(String) in X cannot implement valueOf(String) in HasValue
public enum X implements PoliteEnum, ReverseLookup {
overriding method is static
Há algum caminho?
O objetivo aqui é adicionar silenciosamente (por meio de uma implementação de interface com umdefault
método como eu adicioneipoliteName
na resposta vinculada) alookup
método que faz ovalueOf
função sem gerar uma exceção. É possível? Agora é claramente possível estenderenum
- um dos meus principais problemas com Java até agora.
Aqui está minha tentativa fracassada:
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
}