問題タブ [pecs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
15 に答える
136874 参照

java - PECS(生産者拡張消費者スーパー)とは何ですか?

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

extendsとの間の混乱を解決するために PECS を使用する方法を誰か説明してもらえますかsuper?

0 投票する
2 に答える
156 参照

java - Java の TreeSet.add() が PECS の原則に準拠していない問題 (Generics)

次のコードがあります。

no suitable method for...セグメントインスタンスを追加すると、Java のツリーセットは PECS 原則を適用していないようです。この問題の解決策はありますか?

解決

私は実装しました:

SegmentImpl_v1それを呼び出しますsomeFunction()

0 投票する
1 に答える
128 参照

java - さまざまな抽象化のジェネリックパラメーターを受け入れる単一のメソッドを作成することは可能ですか?

この質問のフォローアップとしてDog、適切な部屋にを追加する単一のメソッドを作成することは可能ですか?Animal(この例では、部屋または部屋のいずれかを受け入れますDog。)または、次のように2つの異なるメソッドを作成する必要がありますか?(型消去のためにオーバーロードに頼ることさえできません)。

0 投票する
3 に答える
924 参照

java - Java ジェネリック PECS

PECS の意味を知っています。

プロデューサーエクステンド、コンシューマースーパー。

問題は、それが消費者か生産者かをどうやって知ることができるでしょうか?

また、このコードは「PECS」に従っていますか

0 投票する
4 に答える
149 参照

java - コレクションに a 型のサブクラスを追加することが違法なのはなぜですか?

このコードスニペットを考えると

num.add(doub) が許可されないのはなぜですか? List<List<Number>>のスーパータイプで はありませんList<List<Double>>か?

0 投票する
2 に答える
272 参照

java - 「スーパー」タイプの境界付きジェネリック メソッド

私が読んだ文献によると、次のインターフェースを実装したジューシーな果物があります。

制限された型変数を使用すると、次のメソッドはたくさんの果物を取り、それらすべてを絞ります:

ここで、以下の下位の兄弟も機能する必要があります。

したがって、メソッドは次のようになると思います。

代わりに、メソッドのシグネチャは次のようになります。

この違いを説明するものは何ですか?

0 投票する
5 に答える
1227 参照

java - Java Generics (制限されたワイルドカード)

Joshua Bloch の著書「Effective Java」によると、ジェネリクスで制限付きワイルドカードをいつどのように使用するかについてのルールがあります。このルールが PECS (Producer-Extends, Comsumer-Super) です。次の例を調べると:

このルールがこの例に完全に適合することを理解しています。pushAllメソッドを次のサンプルとして宣言する必要があります。

しかし、次の例があるとどうなりますか?

次のように宣言する必要がpushAllあります。

PECS規則によれば、上記の宣言は誤りです。しかし、私はStackofを持ち、Integerこれに渡したいStacka Number。なぜそれをしないのですか? キーワード
を常に使用する必要があるのはなぜですか? extends使い方superが間違っているのはなぜですか?
もちろん、消費者の視点も同じです。なぜ消費者は常にあるべきなのsuperですか?


PS: より具体的に言うと、上記の例は、参照されている本のセクション「項目 28」にあります。

0 投票する
3 に答える
545 参照

java - Java、ジェネリック、PECS: C の部分を理解するのにまだ苦労しています。具体例?

ここに 1 つのリンクを掲載しますCollections.sort()。これを含め、PECS パラダイムに関して SO に関する多くの投稿がありまし。私自身の個人的なコードでは、ジェネリックをかなり多く使用していますが、P 部分 (つまり<X extends SomethingElse>) しか使用したことがありません。

Collections.sortジェネリック引数として a を期待します<T extends Comparable<? super T>>super私はそこにキックがどこにあるのかわかりません。これが必要な理由の具体例はありますか?

私がそれに取り組んでいる間、私は P の完全な含意も理解していないことを深く恐れています...私は、P が P であり、C が C であるという明確で明白な証拠を持っていないまま、非常に多くのリンクを読みました。 ..

EDITに関しては、すでにここに回答があるかもしれません」:いいえ、申し訳ありません。私はこのリンクとSOに関する他の多くのリンクを読みました。これはまだ、すべての背後にあるコアメカニズムを教えてくれません。実際、これまでに見つけたすべてのリンクよりも多くのヒントがあります。

0 投票する
3 に答える
2635 参照

java - Java のジェネリックを使用したプロデューサーとコンシューマー

特定のクラスのインスタンスであるオブジェクトを取得するこのメソッドがあります。

メソッドを呼び出すには、次のようにします。

それは良いことですが、次の 2 つの方法でメソッドを呼び出せるようにしたいと考えています。

また

つまり、メソッドの結果を Dog コレクションまたは Animal コレクションに格納できるようにしたいということですDog.classAnimal.class

私は次のようなことを考えていました:

しかし、うまくいきません。ヒントはありますか?

編集: 最後に、@Rohit Jain の回答を使用して、これは UtilitiesClass メソッドを呼び出すときの解決策です。

0 投票する
3 に答える
296 参照

java - ジェネリックの put-get ルールを克服する

aに a を追加できないようにするジェネリックの get および put ルールについて読みました。BananaList<? extends Fruit>

コンパイルエラーがなければ、次のことができることを理解しています。

同じリストに異なるオブジェクトタイプを取得するため、これは間違っているように聞こえます(@Tom Hawtinsによる理由を説明する回答を見て、彼を信じました:)(ただし、リンクが見つかりません))。

ただし、以下を実装する場合:

そして、次のようにします。

コンパイル エラーは発生せず、次の (予期される) 出力が得られます。

そうすることで契約に違反しますか?または、保護を回避していて、それを行うべきではありませんか?