См. Определение Java Enum а также Почему в java перечисление объявляется как Enum < E extends Enum <E → для общей дискуссии. Здесь я хотел бы узнать, что именно было бы сломано (не больше типов, или требует дополнительных приведений и т.д.), Если класс Enum был определен как
public class Enum<E extends Enum>
Я использую этот код для тестирования своих идей:
interface MyComparable<T> {
int myCompare(T o);
}
class MyEnum<E extends MyEnum> implements MyComparable<E> {
public int myCompare(E o) { return -1; }
}
class FirstEnum extends MyEnum<FirstEnum> {}
class SecondEnum extends MyEnum<SecondEnum> {}
С этим я не смог найти никаких преимуществ в этом конкретном случае.
PS. тот факт, что мне не разрешено делать
class ThirdEnum extends MyEnum<SecondEnum> {}
когда MyEnum определяется с рекурсией -
a) не имеет значения, потому что с реальными перечислениями вам не разрешено делать это только потому, что вы не можете расширять enum самостоятельно
b) не верно - попробуйте в компиляторе и убедитесь, что он действительно может скомпилировать без каких-либо ошибок.
ПФС. Я все больше склонен полагать, что правильный ответ здесь будет "ничего не изменится, если вы удалите рекурсивную часть", но я просто не могу в это поверить.