解释Enum声明中使用的generics

有人可以解释一下这意味着什么吗?

Enum<T extends Enum> 

这似乎是一个循环定义,我发现至少可以说它非常混乱。

Java Generics FAQ中有一个很好的解释 。

从结束位:

总而言之,声明Enum extends Enum>可以被解除为: Enum是一种generics类型,只能为其子类型实例化,而这些子类型将inheritance一些有用的方法,其中一些采用子类型特定参数(或以其他方式取决于子类型)。

(我确实很同情 – 递归generics声明是一种痛苦。我的协议缓冲端口到C#甚至更糟糕:它需要两个声明,每个声明自己彼此…我还没有找到一种简化它们的方法。 )