2013-02-28 78 views
0
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>>为什么Enum声明中的类型参数包含递归类型边界?

+1

“换句话说,为什么...不是可比<延伸可比>”,因为这不是有效的Java语法 – newacct 2013-02-28 18:44:43

+0

@newacct如果'枚举>'是有效的Java语法,为什么不'可比较>'?.我已经编辑了这个问题btw?你是说因为我已经删除了额外的'<'''附近的'E'而无效吗? – Geek 2013-02-28 18:52:27

+1

编号类型参数的边界只能在声明类型参数的地方指定。对于泛型类,类型参数在类声明中的类名称后面声明,例如,在类'Enum >'中。对于泛型方法,类型参数在返回类型之前声明。其他任何地方,包括在你的例子中指定超类或接口,你只是使用类型参数;你不能指定边界。 – newacct 2013-02-28 18:58:13

回答

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(注意的情况下的差)。

0

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

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>>

相关问题