PECS(プロデューサーが消費者にスーパーを拡張)とは何ですか?質問する

PECS(プロデューサーが消費者にスーパーを拡張)とは何ですか?質問する

ジェネリック医薬品について調べているときに、 PECS( Producer extendsand Consumersuperの略)に出会いました。

extendsPECS を使用して との間の混乱を解決する方法を説明してくれる人はいますかsuper?

ベストアンサー1

tl;dr:「PECS」はコレクションの観点からのものです。汎用コレクションからアイテムを取り出すだけの場合は、これはプロデューサーであり、 を使用する必要があります。アイテムを詰め込むだけextendsの場合は、これはコンシューマーであり、 を使用する必要があります。同じコレクションで両方を行う場合は、もも使用しないでください。superextendssuper


パラメータとして一連のものを受け取るメソッドがあり、それを単に を受け入れるだけでなく、より柔軟にしたいとします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保証するものです。

おすすめ記事