ホームページ >Java >&#&チュートリアル >Java の Enum ジェネリック型パラメータ「E extends Enum」はどのように機能しますか?

Java の Enum ジェネリック型パラメータ「E extends Enum」はどのように機能しますか?

DDD
DDDオリジナル
2024-11-26 04:22:17514ブラウズ

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

Java Enum 定義: 型パラメーターを使用したジェネリックスを理解する

Java の Enum クラスは、最初はわかりにくいように見える独特の型パラメーターを採用しています。

class Enum<E extends Enum<E>>

このパラメータは、列挙型が別の列挙型から派生する必要があることを意味します。同じ型の引数。実際には、次の例に示すように、type 引数は enum 型そのものです。

public enum StatusCode extends Enum<StatusCode>

このシナリオでは、E は StatusCode と同等です。したがって、E は Enum を拡張し、パラメータの要件を満たします。

この構造により、Enum のように、Enum API がそれ自体を参照できるようになります。 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>

これにより、メッセージとビルダーが確実に比較できるようになります。

type パラメータは不一致を防ぐものではないことに注意してください。たとえば、次の型は有効です。

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

この場合、Second は Comparable を実装します。 Comparable ではなく、予期しない動作が発生する可能性があります。ただし、型パラメータの目的は、有効な場合に利点を提供することであり、必ずしも一貫した使用を強制することではありません。

以上がJava の Enum ジェネリック型パラメータ「E extends Enum」はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。