Estoy tratando de escribir algún código Java para un conjunto de clases enum.Cómo codificar un conjunto de clases enum que todas deberían soportar un método público estático
Cada una de las enumeraciones encapsula algunos datos conceptualmente distintos, por lo que no tiene sentido combinarlos. Las enumeraciones también se asignan a valores en una base de datos, y también comparten algunas operaciones comunes, tanto de instancia como estáticas, relacionadas con la carga de datos de la base de datos.
Necesito generalizar el conjunto de clases enum que tengo, de modo que pueda pasar cualquiera de estas enumeraciones en una clase diferente que realiza y cachés de búsquedas de bases de datos relacionadas con cada una de las diferentes enumeraciones.
Dado que la clase de búsqueda/caché también dependerá de los métodos públicos y estáticos definidos en cada enumeración, ¿cómo puedo codificar mi solución para garantizar que cualquier enumeración que pueda pasar a la clase tenga los métodos necesarios? ?
El enfoque normal sería definir una interfaz, pero las interfaces no permiten métodos estáticos.
Alternativamente, puede usar una clase abstracta para definir la interfaz y parte de la implementación común, pero no creo que eso sea posible con enums (entiendo que las enumeraciones deben extender la clase Enum y no pueden extenderse).
¿Cuáles son mis opciones que tengo que me permitan asegurar que todas mis enumeraciones implementen los métodos que necesito?
Ejemplo enumeración:
public enum MyEnum{
VALUE_ONE("my data");
VALUE_TWO("some other data");
/**
* Used when mapping enums to database values - if that sounds odd,
* it is: it's legacy stuff
*
* set via private constructor
*/
private String myValue;
//private constructor not shown
public static MyEnum lookupEnumByString(String enumValue){
//find the enum that corresponds to the supplied string
}
public String getValue(){
return myValue;
}
}
No conozco los requisitos específicos que tiene, pero ** excepto en casos muy específicos ** donde los valores de la base de datos son ** constantes ** y ** pequeños en números **, los enumerados en los valores de la base de datos tienden a ser un exceso que conduce a una mayor complejidad. Dicho eso, implementar una interfaz (o implementar un método estático como en tu ejemplo) estaría bien. –
Sí, estoy de acuerdo +1. En nuestro caso, esto representa datos estáticos almacenados en la base de datos para que puedan modificarse sin alterar el código. Las enumeraciones también se utilizan para definir valores aceptables para una interfaz web pública, por lo que hemos encontrado que es más fácil encapsular la asignación de datos externos a nuestro servicio web a nuestra base de datos utilizando este conjunto de enums – chrisbunney