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

时间:2013-02-28 09:51:25

标签: java generics enums

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

    }

在上面的代码中,为什么Enum的类型参数存在递归类型绑定,并且包含Comparable<E>的部分缺少原因。换句话说,为什么它是Comparable<E>而不是Comparable<E extends Comparable<E>>

3 个答案:

答案 0 :(得分:4)

Enum<E extends Enum<E>>正在定义E并限制其类型。

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

Comparable<<E> extends Comparable<E>>只会很傻。如果您的意思是Comparable<E extends Enum<E>>,那么您就不需要它,因为已经定义并过滤了E。此时,您现在通知用户更多关于此类的哪些对象,即它们实现Comparable<E>接口。

Enum类型具有递归类型边界,因为它们是递归类型,即enum 自身Enum(请注意大小写差异)。

答案 1 :(得分:0)

可能不希望将Comparable的泛型类型参数绑定到特定类型,而Enum必须绑定到扩展Enum的类型。

答案 2 :(得分:0)

它也是Comparable<E extends Comparable<E>>。由于继承,Comparable<E>Comparable<E extends Enum<E>>E extends Enum<E>相同,Enum<E>Comparable<E>相同。因此Comparable<E>Comparable<E extends Comparable<E>>

相同