首頁 >Java >java教程 >Java 的 Enum 泛型型別參數 `E extends Enum` 如何運作?

Java 的 Enum 泛型型別參數 `E extends Enum` 如何運作?

DDD
DDD原創
2024-11-26 04:22:17512瀏覽

How Does Java's Enum Generic Type Parameter `E extends Enum` Work?

Java 枚舉定義:了解帶有型別參數的泛型

Java 的Enum 類別採用了一種特殊的型別參數,乍看之下可能會讓人感到困惑:

class Enum<E extends Enum<E>>

此參數表示一個枚舉型別必須衍生自另一個具有相同型別的枚舉型別 爭論。實際上,型別參數是枚舉型別本身,如下例所示:

public enum StatusCode extends Enum<StatusCode>

在此場景中,E 相當於 StatusCode。因此,E 擴展了 Enum,滿足參數的要求。

此構造允許 Enum API 引用自身,例如在 Enum 中實作Comparable。基類可以執行比較,同時確保僅比較適當的枚舉。

在 C# 中透過 ProtocolBuffers 的介面觀察到類似的概念:

public interface IBuilder<TMessage, TBuilder>
  where TMessage : IMessage<TMessage, TBuilder> 
  where TBuilder : IBuilder<TMessage, TBuilder>

public interface IMessage<TMessage, TBuilder>
  where TMessage : IMessage<TMessage, TBuilder> 
  where TBuilder : IBuilder<TMessage, TBuilder>

這確保訊息和建構器可以適當配對。

值得注意的是,型別參數並不能防止不一致。例如,以下類型是有效的:

public class First extends Enum<First> {}
public class Second extends Enum<First> {}

在這種情況下,Second 將實作 Comparable;而不是 Comparable,這可能會導致意外行為。然而,類型參數的目的是在有效情況下提供好處,而不一定是強制使用一致的用法。

以上是Java 的 Enum 泛型型別參數 `E extends Enum` 如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn