У меня есть универсальный класс, который представляет фрагмент текста.Этот фрагмент текста может иметь любой из нескольких различных режимов (различные типы выделения).Эти режимы представлены 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;
...
, я получаю следующую ошибку:
Синтаксическая ошибка на токене «расширяется», ожидаемая
Что, согласно подсветке синтаксиса затмения, относится к части кода
E extends Enum<E>
.Кто-нибудь знает, что я делаю не так?Должно быть, я что-то упускаю из Обобщения ...
--------------------- edit -------------------
Наконец-то я нашел время, чтобы прочитать «Эффективную Java» Джоша Блоха (второе издание), и оказалось, что он рассматривает этот вариант использования как Item 34: Emulateрасширяемые перечисления с интерфейсами .Столько, сколько я хотел бы сказать, великий разум думает одинаково ... Это было бы СЛИШКОМ самонадеянным!