0

根据我的上一个问题,我正在阅读Angelika Dissecting Enum的文章。除了类型只能为其子类型实例化并且子类型确实继承了一些常用方法之外,我无法理解这篇文章。

  1. 以这种方式声明的抽象 Enum 类是什么意思?它有什么帮助?
  2. 上一部分的文档描述了三个方面,有人可以向我解释一下吗?
  3. 我确实在代码草图中看到 Enum 类正在声明该compareTo方法。当 Enum 隐式实现Comparable interface. 为什么它需要定义自己的compareTo方法?
  4. 似乎它是递归泛型的概念。递归泛型到底是什么意思?在做了一些研发并理解了我最后一个问题的答案之后,我明白它会强制类本身被参数化。

不过,详细的解释会很有用。

4

2 回答 2

2

我认为声明泛型类型的主要好处Type<E extends Type<E>>是这样的泛型类将使子类继承返回或接受具有子类型类型的参数的方法。此类方法java.lang.Enum有:

public final int compareTo( E o) { ... }
public final Class< E > getDeclaringClass() { ... }

所以,如果我们声明 enum Color,那隐含的意思是:

public class Color extends Enum<Color>

所以在这个类型参数的实例化中Enum分配E了类型参数Color,所以上面的方法看起来像这样:

public final int compareTo(Color o) { ... }
public final Class<Color> getDeclaringClass() { ... }
于 2013-08-27T15:59:33.880 回答
0

当说类似的东西时Enum<Color extends Enum<Color>>,这听起来像是在声明一个泛型类型参数Color,以确保它Enum与类型参数匹配进行扩展Color

但这不是声明类的泛型类型参数的地方。您必须在类名旁边声明它们;您只能在extends子句的后面使用它们。例如

//                Use "extends" here  ...                   not here.
public class MyClass<E extends MyClass<E>> extends MySuperClass<E>

在此示例中,您将 Color声明为已在 上定义的泛型类型参数的值Enum

于 2013-08-26T19:52:25.433 回答