ワイルドカードを使用したJavaジェネリックのextendとsuperの違いを誰かに説明してもらえますか?
関連する投稿を読みましたが、完全には理解できませんでした。リアルタイムの例で説明していただければ、とても助かります。
PECS(プロデューサ・ユー・エクステンド、コンシューム・ユー・スーパー) とはどういう意味ですか?
ワイルドカードを使用したJavaジェネリックのextendとsuperの違いを誰かに説明してもらえますか?
関連する投稿を読みましたが、完全には理解できませんでした。リアルタイムの例で説明していただければ、とても助かります。
PECS(プロデューサ・ユー・エクステンド、コンシューム・ユー・スーパー) とはどういう意味ですか?
クラスA、B、およびCがある場合、
A が B を拡張する
と
B は C を拡張します
それで
A と B の一致:
? Bを拡張する
と
B と C の一致:
? 見事
型パラメータ <? extends T> は、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 GenericsのGet and Put Principleとしても知られています。
「構造体から値を取得する場合は
extends
ワイルドカードを使用し、値を構造体に入れるだけsuper
の場合はワイルドカードを使用し、取得と配置の両方を行う場合はワイルドカードを使用しないでください。」