Дженерики Java для дженериков

У меня есть общий класс, который представляет фрагмент текста. Этот фрагмент текста может иметь любой из множества различных режимов (разные типы выделения). Эти режимы представлены Enum. Enum может быть разным для каждого проекта, но он должен реализовывать интерфейс, который предоставляет метод для объединения двух из них (может быть выделен и выделен жирным шрифтом). Итак, у меня есть интерфейс:

public interface TextFragmentMode<E extends Enum<E>> {
    /**
     * Will combine the supplied mode with the current mode and return the
     * result.
     * 
     * @param mode The mode to combine with.
     * @return The combined mode.
     */
    public E combine( E mode );
}

Тогда мой TextFragment является контейнером как для строки текста, так и для режима. Но когда я пытаюсь объявить класс:

public class TextFragment<E extends TextFragmentMode<E extends Enum<E>>> {
    StringBuilder text;
    E mode;
    ...

, я получаю следующую ошибку:

Синтаксическая ошибка для токена "extends", ожидается

Что, согласно выделению синтаксиса eclipse, относится к части

E extends Enum<E>

кода. Кто-нибудь знает, что я делаю не так? Должно быть, мне что-то не хватает в Generics ...

--------------------- edit --------------- ----

Я ' m наконец нашел время, чтобы прочитать «Эффективную Java» Джоша Блоха (второе издание), и оказалось, что он рассматривает этот вариант использования как Правило 34: Эмуляция расширяемых перечислений с интерфейсами . Как бы я ни хотел сказать, великий ум думает одинаково ... Это было бы слишком самонадеянно!

10
задан Lucas 11 March 2012 в 20:04
поделиться