Tengo una pregunta sobre el mejor patrón de diseño para la reutilización de código cuando se trata de enumeraciones de Java. Básicamente, lo que intento lograr es poder definir varias enumeraciones que modelan colecciones de negocios estáticas (conjuntos de constantes), pero también me gustaría compartir el comportamiento entre ellas, con una codificación mínima.Ampliación de Java Enums
Esto es trivial con las clases abstractas pero, como las enumeraciones Java no se pueden extender (solo pueden implementar interfaces), este tipo de trabajo es tedioso e implica mucho trabajo de copiar/pegar propenso a errores (copiar el código de enum a enum). Los ejemplos de "lógica de negocios" que deben compartirse entre todas las enumeraciones incluyen la conversión de/a cadenas, comparación de instancias y lógica, etc.
Mi mejor oportunidad ahora es utilizar clases de ayuda junto con las interfaces de negocios, pero esto solo va hasta ahora en la reducción de la complejidad del código (ya que todas las enumeraciones aún tienen que declarar e invocar las clases de ayuda). Ver ejemplo (sólo para aclarar):
public enum MyEnum {
A, B, C;
// Just about any method fits the description - equals() is a mere example
public boolean equals(MyEnum that) {
ObjectUtils.equals(this, that);
}
}
Cómo hacer StackOverflowers acuerdo con esta "característica del lenguaje"?
podría tratar de Lombok y '@ Delegate', nunca he lo intenté con una enumeración. –
En Java 6, las enumeraciones son una clase final; no puedes extenderlos. Creo que Java 7 es lo mismo. – DwB
Las enumeraciones no están hechas para eso: usan clases (o clases con enumeraciones) o separan la lógica; podría usar un patrón de fábrica para un caso como este (si el comportamiento es lo suficientemente diferente de enum a enum). – Viruzzo