簡體   English   中英

安吉利卡·朗格·埃納姆 <E extends Enum<E> &gt;解碼

[英]Angelika Langer Enum<E extends Enum<E>> decoding

根據我的上一個問題 ,我正在閱讀Angelika Dissecting Enum的文章。 除了只能針對其子類型實例化類型並且這些子類型確實繼承了一些通用方法的要點外,我無法理解本文。

  1. 以這種方式聲明的抽象Enum類的含義是什么? 有什么幫助?
  2. 最后一部分的文件描述了三個方面,有人可以向我更輕松地解釋它們嗎?
  3. 我確實在代碼草圖中看到Enum類正在聲明compareTo方法。 當Enum隱式實現Comparable interface 為什么需要定義自己的compareTo方法?
  4. 似乎它是遞歸泛型的概念。 遞歸泛型到底是什么意思? 在進行了一些研發並理解了我的最后一個問題答案之后,我了解到它迫使該類對其自身進行參數化。

盡管如此,詳細的解釋還是有用的。

我認為在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() { ... }

當說類似Enum<Color extends Enum<Color>>時,聽起來好像您在聲明一個泛型類型參數Color ,以確保它使用匹配Color的類型參數擴展Enum

但這不是為類聲明泛型類型參數的地方。 您必須在類名旁邊聲明它們; 您只能稍后在extends子句中使用它們。 例如

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

在此示例中,您將Color 聲明為Enum上已經定義的通用類型參數的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM