問題タブ [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.
java - Java:理解を助けてください:制限付きワイルドカードフィールドでインターフェイスメソッドを使用する方法は?
(一般的に入力された)ワイルドカードを使用できない(そう思われる)場合、なぜこのような有界ワイルドカードを使用できるのか理解するのに苦労しています。
クラスにワイルドカードフィールドがある場合、実装されたインターフェイスのジェネリックパラメーターを持つメソッドを使用できません(null
引数として指定しない限り)。
FWIW、C#コンパイラに同様のものを受け入れるように説得することはできませんでした。
私は何かが足りないのですか?
java - グアバでは、「? super T」が可能なのに「T」だけが使用されるのはなぜですか?
T
ユーティリティ ファクトリ メソッドが、バインドされたワイルドカード パラメータ ( など) ではなく、特定のジェネリック パラメータ ( など) を使用することが多いのはなぜ? super T
ですか?
たとえば、Functions#forPredicateの署名は次のとおりです。
使用しない理由:
次のようなことが可能になるのはどれですか?
これを不要にするために、との消費者が必要な限定されたワイルドカード パラメータを持つことが期待されているためですか? たとえば、Iterables#findの一般的な境界により、 a でaを使用できるようになります。Function
Predicate
Predicate<Number>
Iterable<Integer>
他の理由はありますか?
java - Java: ワイルドカード境界の not 演算子
いくつか読んだ後、 & 演算子を使用して複数の拡張を要求できるようです。Class<T extends Class1 & Class2> classObj;
ただし、コンパイル時に「not」機能を強制する方法を探しています。バナナがフルーツを拡張する例があります。ただし、次のようなものを求めています。
明らかにClass<? extends Fruit ! Banana>
有効な構文ではありません。コンパイル時にこの種の型階層を適用するには、どのようなアプローチをお勧めしますか?
java - `? の使用の違いは? パラメータと変数の super`
でジェネリックを理解したと思いましたsuper
。しかし、私は完全に間違っているに違いありません:
この簡単な例では:
このコードは、Dog のスーパー クラスを渡しているため、正常に機能します。
しかし、私が理解していないのは、これは同じことだと思ったということです:
しかし、コンパイルに失敗します。2つの違いは何ですか?
ところで、こっそり別の質問をしたいと思います。間に違いはありますか
与えられた型の消去がコンパイル時にそれを削除すると、コンパイラが参照型をチェックしていることと同じだと思います。これは正しいです?
java - Generic 0 は java.lang.Short にキャストできません
クラスに 2 つのマップがあります (ジェネリックは初めてです)
キーがマップに存在しない場合、ゼロ値を取得したい。したがって、入力を最小限に抑えるためにこのラッパーメソッドを作成しましたcontainsKey(key)
私はそれを次のように呼びます
2番目のケースでは、次のようになります。
したがって、おそらく のようなことをする必要があります: new Number(0)
が、 Number は抽象的です。
どうすれば修正できますか?
編集:
私の考えは、追加のifなしで算術演算を行うことです:
java - Javaの一般的なあいまいさ
とのようnode<E>
な2つの操作を持つジェネリック型があり、それまでにインスタンスになる場合、コンパイラが少なくとも使用を許可しないのはなぜですか?他のタイプが許可されない理由は理解できますが、ノードのタイプは少なくとも数値になると確信しているので、数値タイプの入力を許可しないのはなぜですか?setData(E Type)
E getData()
s0
node
node<? extends Number>
s0.setData(Number Type)
setData
私のコードは次のようになります:
java - 上限のあるジェネリックに関する問題
ジェネリックを使用するメンバーを含むクラスで問題が発生しています。次のサンプル クラスを検討してください。
次に、構造体を使用する次のクラスがあります
これだけではうまくいきません。
意味あり; StructureImpl<BaseRequest> は実際には StructureImpl<SubRequest> のサブクラスではありません。そこで、ワイルドカードを使用するように StructureUsingObject を変更してみます。
これもうまくいきません。
OK、それも理にかなっていますが、オートコンプリートのツールチップはそうではありません (getDependencies は引数として (null t) を持つ必要があると述べています)。ここからどこへ行けばいいのかよくわかりません。foreach 内でワイルドカードを使用できません。StructureUsingObject が BaseRequest のサブクラスを持つ構造体を受け入れることができると同時に、リストの要素で getDependencies を呼び出すこともできるという要件を満たすにはどうすればよいですか?
java - Java Generics (制限されたワイルドカード)
Joshua Bloch の著書「Effective Java」によると、ジェネリクスで制限付きワイルドカードをいつどのように使用するかについてのルールがあります。このルールが PECS (Producer-Extends, Comsumer-Super) です。次の例を調べると:
このルールがこの例に完全に適合することを理解しています。pushAll
メソッドを次のサンプルとして宣言する必要があります。
しかし、次の例があるとどうなりますか?
次のように宣言する必要がpushAll
あります。
PECS規則によれば、上記の宣言は誤りです。しかし、私はStack
ofを持ち、Integer
これに渡したいStack
a Number
。なぜそれをしないのですか?
キーワード
を常に使用する必要があるのはなぜですか? extends
使い方super
が間違っているのはなぜですか?
もちろん、消費者の視点も同じです。なぜ消費者は常にあるべきなのsuper
ですか?
PS: より具体的に言うと、上記の例は、参照されている本のセクション「項目 28」にあります。
java - "?" を伴う "super" の使用 Javaで
Javaコードを読んで理解しようとしています。ここにあります:
とは<? super PopulationLoadContext>
どういう意味ですか?