1. ホーム

[解決済み】PECS(Producer Extends Consumer Super)って何?)

2022-03-23 21:52:36

質問

PECS(の略)に出会いました。 プロデューサー extends と消費者 super ) を読みながら、ジェネリックについて勉強しました。

の混乱を解決するために、PECSをどのように使用すればよいか、どなたか説明していただけませんか? extendssuper ?

解決方法は?

tl;dr: "PECS"はコレクションから見たものです。もし、あなたが のみ 一般的なコレクションからアイテムを引っ張ってくる場合、それはプロデューサーであり、そのために extends もし、あなたが のみ アイテムを詰め込んでいる場合は、コンシューマであるため super . もし、同じコレクションで両方を行う場合は extends または super .


物事のコレクションをパラメータとして受け取るメソッドがあるとします。 Collection<Thing> .

ケース 1: コレクションを調べて、各項目に対して処理を行いたい場合。

そうすると、リストは プロデューサー を使用する必要があります。 Collection<? extends Thing> .

という推論があります。 Collection<? extends Thing> の任意のサブタイプを保持することができます。 Thing として動作し、各要素は Thing を実行したときです。(実際には、何も(NULLを除いて)追加することはできません。 Collection<? extends Thing> というのは、実行時にどの 特定の のサブタイプは Thing は、コレクションが保持する)

ケース2:コレクションに物を追加したい。

そうすると、リストは 消費者 を使用する必要があります。 Collection<? super Thing> .

この理由は Collection<? extends Thing> , Collection<? super Thing> を常に保持することができます。 Thing 実際のパラメータ化された型が何であってもです。ここでは、リストの中に何があっても、それが Thing を追加することで、このような ? super Thing を保証します。