为什么 Enum 声明中的类型参数包含递归类型界限?

Gee*_*eek 0 java generics enums

  public abstract class Enum<E extends Enum<E>>
            implements Comparable<E>, Serializable {
     // All code goes here

    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,为什么 的类型参数有递归类型绑定Enum,以及为什么包含 的部分缺失Comparable<E>。换句话说,为什么它是Comparable<E>而不是Comparable<E extends Comparable<E>>

Old*_*eon 5

定义并限制它的类型Enum<E extends Enum<E>>E

现在已经定义了您到达的时间Comparable<E> E,因此您无需进一步限定它。

Comparable<<E> extends Comparable<E>>那就太傻了。如果您的意思是类似的内容Comparable<E extends Enum<E>>,那么您就不需要它,因为它E已经被定义和过滤了。此时,您现在将更多地告知用户此类对象的用途,即它们实现接口Comparable<E>

Enum类型具有递归类型界限,因为它们是递归类型,即 an本身enum 就是an Enum(注意大小写差异)。