Как кодировать набор классов перечисления, которые все должны поддерживать общедоступный статический метод

Я пытаюсь написать код 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;
    }
}
9
задан chrisbunney 7 February 2011 в 16:36
поделиться