根据我的Previous Question,我正在阅读Angelika Dissecting Enum中的文章。除了类型只能为其子类型实例化并且子类型继承了一些常用方法的点之外,我无法理解该文章。
compareTo
方法。当Enum隐含地实现Comparable interface
时。为什么需要定义自己的compareTo
方法?尽管如此,详细解释仍然有用。
答案 0 :(得分:1)
我认为将泛型类型声明为Type<E extends Type<E>>
的主要好处是,这些泛型类将使子类继承返回或接受具有子类型类型的参数的方法。 java.lang.Enum
中的此类方法是:
public final int compareTo( E o) { ... }
public final Class< E > getDeclaringClass() { ... }
因此,如果我们声明枚举Color
,则隐含地表示:
public class Color extends Enum<Color>
所以在Enum
的实例化中,类型参数E
被赋予类型参数Color
,因此上述方法将如下所示:
public final int compareTo(Color o) { ... }
public final Class<Color> getDeclaringClass() { ... }
答案 1 :(得分:0)
在说Enum<Color extends Enum<Color>>
之类的内容时,听起来就像是在声明一个泛型类型参数Color
,以确保它扩展Enum
类型参数匹配Color
。
但这不是声明类的泛型类型参数的地方。您必须在类名旁边声明它们;您只能在extends
子句中稍后使用它们。 E.g。
// Use "extends" here ... not here.
public class MyClass<E extends MyClass<E>> extends MySuperClass<E>
在此示例中,您声明类 Color
是已在Enum
上定义的泛型类型参数的值。