Я пытаюсь написать код Java для набора классов перечислений.
Каждое из перечислений инкапсулирует некоторые концептуально различные данные, поэтому нет смысла использовать объедините их. Перечисления также сопоставляются со значениями в базе данных и, таким образом, также используют некоторые общие операции, как операции экземпляра, так и статические операции, связанные с загрузкой данных из базы данных.
Мне нужно обобщить набор имеющихся у меня классов перечислений, так что я могу передать любое из этих перечислений другому классу, который выполняет и кэширует поиск в базе данных, относящийся к каждому из различных перечислений.
Поскольку класс кеширования / поиска также будет зависеть от общедоступных и статических методов, определенных в каждом enum, как я могу закодировать свое решение, чтобы я мог гарантировать, что любое перечисление, которое может быть передано в класс, будет иметь необходимые методы?
Обычным подходом было бы определение интерфейса, но интерфейсы не допускают статических методов .
В качестве альтернативы вы можете использовать абстрактный класс для определения интерфейса и некоторых общих реализаций, но я не верю, что это возможно с перечислениями (я понимаю, что перечисления должны расширять класс Enum и не могут быть расширены).
Какие у меня есть варианты, которые позволяют мне гарантировать, что все мои перечисления реализуют нужные мне методы?
Пример перечисления:
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;
}
}