問題タブ [bounded-wildcard]

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 投票する
3 に答える
250 参照

java - Java:理解を助けてください:制限付きワイルドカードフィールドでインターフェイスメソッドを使用する方法は?

(一般的に入力された)ワイルドカードを使用できない(そう思われる)場合、なぜこのような有界ワイルドカードを使用できるのか理解するのに苦労しています。

クラスにワイルドカードフィールドがある場合、実装されたインターフェイスのジェネリックパラメーターを持つメソッドを使用できません(null引数として指定しない限り)。

FWIW、C#コンパイラに同様のものを受け入れるように説得することはできませんでした。

私は何かが足りないのですか?

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

java - グアバでは、「? super T」が可能なのに「T」だけが使用されるのはなぜですか?

Tユーティリティ ファクトリ メソッドが、バインドされたワイルドカード パラメータ ( など) ではなく、特定のジェネリック パラメータ ( など) を使用することが多いのはなぜ? super Tですか?

たとえば、Functions#forPredicateの署名は次のとおりです。

使用しない理由:

次のようなことが可能になるのはどれですか?

これを不要にするために、との消費者が必要な限定されたワイルドカード パラメータを持つことが期待されているためですか? たとえば、Iterables#findの一般的な境界により、 a でaを使用できるようになります。FunctionPredicatePredicate<Number>Iterable<Integer>

他の理由はありますか?

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

java - Java: ワイルドカード境界の not 演算子

いくつか読んだ後、 & 演算子を使用して複数の拡張を要求できるようです。Class<T extends Class1 & Class2> classObj;

ただし、コンパイル時に「not」機能を強制する方法を探しています。バナナがフルーツを拡張する例があります。ただし、次のようなものを求めています。

明らかにClass<? extends Fruit ! Banana>有効な構文ではありません。コンパイル時にこの種の型階層を適用するには、どのようなアプローチをお勧めしますか?

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

java - `? の使用の違いは? パラメータと変数の super`

でジェネリックを理解したと思いましたsuper。しかし、私は完全に間違っているに違いありません:

この簡単な例では:

このコードは、Dog のスーパー クラスを渡しているため、正常に機能します。

しかし、私が理解していないのは、これは同じことだと思ったということです:

しかし、コンパイルに失敗します。2つの違いは何ですか?


ところで、こっそり別の質問をしたいと思います。間に違いはありますか

与えられた型の消去がコンパイル時にそれを削除すると、コンパイラが参照型をチェックしていることと同じだと思います。これは正しいです?

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

java - Generic 0 は java.lang.Short にキャストできません

クラスに 2 つのマップがあります (ジェネリックは初めてです)

キーがマップに存在しない場合、ゼロ値を取得したい。したがって、入力を最小限に抑えるためにこのラッパーメソッドを作成しましたcontainsKey(key)

私はそれを次のように呼びます

2番目のケースでは、次のようになります。

したがって、おそらく のようなことをする必要があります: new Number(0)が、 Number は抽象的です。

どうすれば修正できますか?

編集:

私の考えは、追加のifなしで算術演算を行うことです:

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

java - Javaの一般的なあいまいさ

とのようnode<E>な2つの操作を持つジェネリック型があり、それまでにインスタンスになる場合、コンパイラが少なくとも使用を許可しないのはなぜですか?他のタイプが許可されない理由は理解できますが、ノードのタイプは少なくとも数値になると確信しているので、数値タイプの入力を許可しないのはなぜですか?setData(E Type)E getData()s0nodenode<? extends Number>s0.setData(Number Type)setData

私のコードは次のようになります:

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

java - 上限のあるジェネリックに関する問題

ジェネリックを使用するメンバーを含むクラスで問題が発生しています。次のサンプル クラスを検討してください。

次に、構造体を使用する次のクラスがあります

これだけではうまくいきません。

意味あり; StructureImpl<BaseRequest> は実際には StructureImpl<SubRequest> のサブクラスではありません。そこで、ワイルドカードを使用するように StructureUsingObject を変更してみます。

これもうまくいきません。

OK、それも理にかなっていますが、オートコンプリートのツールチップはそうではありません (getDependencies は引数として (null t) を持つ必要があると述べています)。ここからどこへ行けばいいのかよくわかりません。foreach 内でワイルドカードを使用できません。StructureUsingObject が BaseRequest のサブクラスを持つ構造体を受け入れることができると同時に、リストの要素で getDependencies を呼び出すこともできるという要件を満たすにはどうすればよいですか?

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 に答える
192 参照

java - "?" を伴う "super" の使用 Javaで

Javaコードを読んで理解しようとしています。ここにあります:

とは<? super PopulationLoadContext>どういう意味ですか?