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