ホームページ > Java > &#&チュートリアル > Java の Enum ジェネリック型パラメータ ` はどのように機能し、その制限は何ですか?

Java の Enum ジェネリック型パラメータ ` はどのように機能し、その制限は何ですか?

Linda Hamilton
リリース: 2024-11-27 13:41:10
オリジナル
145 人が閲覧しました

How Does Java's Enum Generic Type Parameter `` Work and What Are Its Limitations?

Java Enum ジェネリック型パラメータ

構文

class Enum<E extends Enum<E>></pre&gt ; Java ジェネリックスのコンテキストでは、最初は混乱するように思えるかもしれません。ただし、この型パラメータは Enum クラス内で特定の目的を果たします。</p><p><strong>自己参照型引数</strong></p><p>型引数 E は列挙型自体を表します。列挙型から型引数を導出することにより、定義は、列挙型が型引数としてそれ自体を参照する必要があることを効果的に宣言します。</p><p>たとえば、次の列挙型を考えてみましょう。</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public class StatusCode extends Enum<StatusCode> {
    // ...enum constants...
}</p>
<p>この例では、この場合、E は StatusCode に相当します。この自己参照型引数には次の利点があります。</p>
<ul>
<li>
<strong>自己参照 API:</strong> Enum クラスが API 内で独自の型を参照できるようにします (Enum&lt の宣言など)。 ;E> Comparable<E> を実装します。</li>
<li>
<strong>タイプ セーフティ:</strong> 列挙型が同じ型の他の列挙型とのみ比較できるようにし、異なる列挙型間の無効な比較を防ぎます。</li>
</ul> <p><strong>その先のアプリケーションEnum</strong></p>
<p>このタイプの自己参照型パラメーターは主に Enum クラスで使用されますが、それ自体を再帰的に参照する型を定義する必要がある他のコンテキストでも使用できます。</p>
<p>一例は、ProtocolBuffers で使用される Message インターフェイスと Builder インターフェイスです。これらのインターフェイスは、メッセージが不変でビルダーが変更可能なペアで使用するように設計されています。次のインターフェイスは、自己参照型引数の使用を示しています。</p>
<pre class="brush:php;toolbar:false">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 ジェネリック型パラメータ ` はどのように機能し、その制限は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート