2

ワイルドカードを使用したJavaジェネリックのextendとsuperの違いを誰かに説明してもらえますか?

関連する投稿を読みましたが、完全には理解できませんでした。リアルタイムの例で説明していただければ、とても助かります。

PECS(プロデューサ・ユー・エクステンド、コンシューム・ユー・スーパー) とはどういう意味ですか?

4

2 に答える 2

3

クラスA、B、およびCがある場合、

A が B を拡張する

B は C を拡張します

それで

A と B の一致:

? Bを拡張する

B と C の一致:

? 見事

于 2012-06-22T13:11:05.563 に答える
1

型パラメータ <? extends T> は、T または T の任意のサブクラスを意味します。

型パラメータ <? super T> は、T または T の任意のスーパークラスを意味します。

例えば:

  • イテラブル<? extends T> は、next() メソッドが T を返す任意の反復子をサポートします。これには、T のサブクラスを返す反復子が含まれます。
  • コレクション<? super T> は、T を配置できるすべてのコレクションをサポートします。これには、T の任意のスーパークラスのオブジェクトを保持できるコレクションが含まれます。

Joshua Bloch は、Effective Java でニーモニック PECS を推奨しています-- Producer -Extends, Consumer-Super」です。

「パラメータ化された型が T プロデューサーを表す場合は を使用<? extends T>し、T コンシューマーを表す場合は を使用します<? super T>。」

これは、Maurice Naftalin と Philip Wadler によるJava GenericsGet and Put Principleとしても知られています。

「構造体から値を取得する場合はextendsワイルドカードを使用し、値を構造体に入れるだけsuperの場合はワイルドカードを使用し、取得と配置の両方を行う場合はワイルドカードを使用しないでください。」

于 2012-06-22T13:27:56.080 に答える