問題タブ [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:境界ワイルドカードまたは境界型パラメータ?
最近、この記事を読みました: http://download.oracle.com/javase/tutorial/extra/generics/wildcards.html
私の質問は、次のようなメソッドを作成する代わりに:
私はこのようなメソッドを作成することができ、それは正常に動作します:
どの方法を使用すればよいですか? この場合、ワイルドカードは役に立ちますか?
java - 生のタイプ、制限のないワイルドカードおよび制限のあるワイルドカード
以下のような簡単な質問があります。この問題全体に関する簡単な例を次に示します。
khalidmughalによるJavaSCJPによると(非常に良い本です!):
有界ウィルカード参照に割り当てられた場合、rawタイプ(例a)がチェックされていない警告が問題になることを理解しています(そのrawタイプaのコンテンツは何でもかまいません)。
私の質問は、cが最高の上限(?はオブジェクトを拡張する)なので、その警告なしにcに割り当てることはできないのでしょうか?
java - Java generics and bounded types
I have a wrapper class for ConcurrentMap like the following:
The marked line triggers the following compilation error:
I suspect the unbounded wildcards are the culprit but I can't change the method signature since it is inherited from the ConcurrentMap interface. Any ideas?
java - Java バウンド ワイルドカード ジェネリックでのコンパイラ エラー
以下のコードを持つ:
最後の 2 行でコンパイル エラーが発生しますが、いくつか考えてみましたが、コンパイル エラーが発生する理由がわかりません。
最後の行にコメントすると、上記のコンパイル エラーが引き続き発生しますが、私の理解では、コンパイラはこれらの行から正しい型 (スタック) を推測できるはずです。
どうもありがとう
java - バインドされたワイルドカード ジェネリックで複数のインターフェイスを使用できないのはなぜですか?
Java のジェネリック型には、あらゆる種類の直観に反するプロパティがあることを私は知っています。これは特に私が理解していないものであり、誰かが私に説明してくれることを望んでいます. クラスまたはインターフェイスの型パラメーターを指定する場合、複数のインターフェイスを実装する必要があるようにバインドできますpublic class Foo<T extends InterfaceA & InterfaceB>
。ただし、実際のオブジェクトをインスタンス化する場合、これは機能しなくなります。List<? extends InterfaceA>
問題ありList<? extends InterfaceA & InterfaceB>
ませんが、コンパイルに失敗します。次の完全なスニペットを検討してください。
のセマンティクスはbar
明確に定義されている必要があるようです。1 つの型だけでなく 2 つの型の共通部分を許可することで、型の安全性が失われるとは考えられません。確かに説明はあるけど。誰がそれが何であるか知っていますか?
java - Mockito: 限定されたワイルドカードで型を返すスタブ メソッド
次のコードを検討してください。
コンパイラは、 の動作をスタブしようとしている行について不平を言いdummyMethod()
ます。バインドされたワイルドカードを持つ型を返すメソッドをスタブ化する方法についての指針はありますか?
java - ジェネリック: ? の ArrayList Java で ISomeInterface を拡張します
次のコードで問題が発生しています。
これにより、「returnedEvents.add(new GoogleEvent()); コード行」に対して次のコンパイル エラーが返されます。
ArrayList 型のメソッド add(capture#1-of ? extends IEvent) は、引数 (GoogleEvent) には適用されません。
クラスの宣言は次のGoogleEvent
とおりです。
Java でジェネリックを使用すると、いくつかのトリッキーな部分があることはわかっています。したがって、ワイルドカードですが、これを理解できないようです。
ありがとう。
java - java.lang.Class の getInterfaces() メソッドが Class [] ではなく Class [] を返すのはなぜですか?
(質問を明確にするために、「T」はクラスで宣言された型パラメーターを指します)
例として、次のアプリケーションを確認してください。
出力は期待されるものです:
したがって、上記の例に基づいて、他のすべてのインターフェースと同様に、InterfaceAがワイルドカードの境界を満たしていることをコンパイラが認識していることがわかります。
直感的には、次のことは安全だと思いますが、そうではありません。
署名がクラスを返すと述べているため、コンパイラは警告を出します。ただし、Class の javadoc には次のように記載されています。
このオブジェクトがクラスを表す場合、戻り値は、クラスによって実装されたすべてのインターフェイスを表すオブジェクトを含む配列です。
この場合、「このオブジェクト」は を指しますClassA
。このステートメントに基づいて、次のように呼び出します。
Class<?>
論理的には、返された配列のすべてに のスーパー タイプへの参照が含まれることがわかりClassA
ます。
追加の参照ポイントとして:
Java 言語リファレンス、第 3 版から:
クラスは、直接のスーパークラスと直接のスーパーインターフェースが行うすべてのインターフェースを必然的に実装します。この (複数の) インターフェイス継承により、オブジェクトは実装を共有することなく (複数の) 共通の動作をサポートできます。
これと仕様の他の部分を読むと、クラスによって実装または拡張されたクラスまたはインターフェースはすべてT
境界に分類されると思います<? super T>
。
編集:
私の質問には具体的な理由がないことが示唆されています。例を挙げます:
<? super W>
問題は 15 行目です。正しい型を取得するには、にキャストする必要があります。コンパイラの警告は抑制できますが、正当化されますか? このキャストが正しくないシナリオはありますか?
java - Java ジェネリック メソッド: スーパーは使用できませんか?
だから私はこの方法を持っています:
void メソッドを使用する代わりにコレクションを返したい:
このようなことをするつもりで(ここでMyItemClass extends MyItemBaseClass
):
しかし、次の構文エラーが発生しますsuper
。
トークン "super" の構文エラー、予想される
何を与える?これを修正できますか?
java - ジェネリック バウンド ワイルドカード タイプに関する混乱
かなり些細な Java の質問です。このコードにはエラーがあります:
それを修正する正しい方法は何ですか?
の考え方は、T
基本的にクラスの階層ルートの一種にすぎないため、次のような階層が与えられます。
1 つは にT
設定されEntity
、の具象型に依存し、常に Is-Aに依存する場所getEditorFor(T obj)
を返す責任があります。したがって、 がある場合、when isとwhen isを返します。Editor<X>
X
obj
T
SubTypeDependentEditor<Entity>
getEditorFor(T obj)
Editor<EntityA>
obj
EntityA
Editor<EntityB>
obj
EntityB
これを警告なしで実装できる可能性はありますか?
アップデート:
Editor<X>
基本的に他の署名を持つことができますが、そのコードを実装するコードEditor<T>
にはgetEditorFor(T obj)
.