Здравствуйте! Прочитал
эту статью, пару ответов на StackOverFlow, но все равно осталось много вопросов по поводу self-bounded types.
Как я правильно понял, что
class Enum<E extends Enum<E>>
- это класс, аргументом типа которого является его производный класс, и такая форма записи используется для того, что бы методы базового класса могли прямо использовать экземпляры производного класса.
Однако возникают вопрос - почему нельзя вместо использования параметризации просто указать в аргументах методов ссылку на базовый класс? Полиморфизм как раз обеспечит то, что нужно. Если нужен, например, только экземпляр производного класса для сравнения с чем-то, то это подойдет. А если требуется использование методов производного класса, можно использовать RTTI.