Может кто-нибудь объяснить, что это значит?
Enum<T extends Enum<T>>
Это похоже на круговое определение, и я нахожу это крайне запутанным, если не сказать больше.
Хорошее объяснение есть в разделе часто задаваемых вопросов по Java Generics .
С конца бит:
Подводя итог, можно расшифровать декларацию Enum<E> extends Enum<E>> as: Enum - это универсальный тип, который может быть созданным только для его подтипов, и эти подтипы будут наследовать некоторые полезные методы, некоторые из которых принимают конкретные аргументы подтипа (или в противном случае зависит от подтипа).
Enum<E> extends Enum<E>>
Enum
(хотя я сочувствую - рекурсивно общие объявления - это боль. Мой протокол буферизует порт на C # еще хуже: для него требуется два объявления, каждое из которых ссылается на себя и друг на друга ... У меня нет не нашел способ их упростить.)