問題タブ [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 - 一般的な下限のバインドされていないワイルドカードと上限のあるワイルドカード
この質問に対する答えは、メソッドがワイルドカードの汎用typを使用する場合、コレクションにアクセスまたは変更できるが、両方はできないことを示しています。(キャシーとバート)
'メソッドがワイルドカードの汎用typを使用する場合、コレクションにアクセスまたは変更できますが、両方を使用することはできません'とはどういう意味ですか?
私の知る限り、メソッドdo1にはList<? extends Dog> d2
、d2にのみアクセスでき、変更できないようになっています。メソッドd2にはList<? super Collie> c2
、c2にアクセスして変更でき、コンパイルエラーがないようになっています。
java - 実行時に認識される一般的な上限のあるワイルドカードのインスタンス化
Organic引数でreactメソッドを呼び出せないのはなぜですか?
参照<? extends Organic>
のジェネリック型は、インスタンス化のジェネリック型が Organic または Organic のサブタイプのいずれかであると述べています。
コンパイラは、ランタイム型までこのインスタンス化ジェネリック型を認識していないため、ジェネリック基準に値をバインドしませんか?
なぜこのケースが機能するのですか?この場合も同じですか?
java - ジェネリック引数メソッド? 素晴らしい
このタイプでAppleのスーパータイプを追加できると想定されている場合、新しいオブジェクトをリストに追加できないのはなぜですか?
引数を List リストに変更すると、もちろん動作します:s
以前のケースでコンパイラがオブジェクトのクラスについて知らなかった場合、なぜ私たちはリターン時に Mixer を使用できるのでしょうか?¿
java - Pair をインスタンス化できる理由しかし、ペアではできません
では、Pair をインスタンス化できるのに、Pair をインスタンス化できないのはなぜですか。
VS
私はそれが<?>
不明なタイプを意味することを知っています-><? extends Object>
しかし、<T>
意味は同じではありません ---><T extends Object>
誰にもアイデアがありますか?
java - getSuperclass() のクラス意味がありますか?
Class クラスの getSuperclass() は、型が <? super T>、これは、スーパーのクラスの型パラメーターが T またはそのスーパークラスのいずれかである可能性があることを意味しますが、スーパークラスのクラスの型パラメーターがサブクラスと同じ型になるのはなぜですか?
例えば
戻りません
まったく..決して
これは理にかなっていますか?または私はここに何かが欠けていますか?
java - Javaのインターフェースを使用してジェネリック型をバインドする方法はありますか?
.compareTo()
タイプのメソッドを使用して、入力されたアイテムをソートする一般的なリストを作成しようとしています。しかし、最初の行で問題が発生しました。タイプは whichimplements Comparable<T>
でなければならないので、これを強制する方法はありますか? 私は構文を推測します:
動作しません。助言がありますか?前もって感謝します!
java - 上限のArrayListに追加するのに適したメソッド引数
次のコードは、特定の種類のShapeを管理するためにサブクラス化されることを意図した抽象クラスの一部です。(実際には特定のクラスのリポジトリですが、現在は関係ありません)
ArrayListに追加するのに適したaddShapeの引数としてShapeサブクラスを受け入れるにはどうすればよいですか?
java - javaコンパイラは「メソッドが適用できない」とどのように判断しますか?
ワイルドカードを使用する場合、一部のメソッド ( などArrayList.set
) は使用できず、次のようなエラー メッセージが返されます。
List 型のメソッド set(int, capture#3-of ?) は、引数 (int, String) には適用されません。
これが事実である理由を読んだので、これがどのように行われるか知りたいです。List.get(int)
これは、一部のメソッドが適用可能 (例: ) であり、他のメソッドが適用可能でないことをコンパイラが認識する方法です。
java - 共分散と逆分散を持つJavaワイルドカードジェネリックと同等の.NET ?
(制限付きの)ワイルドカードジェネリックを使用するJavaコードをC#に変換しようとして立ち往生しています。私の問題は、Javaでは、ワイルドカードを使用すると、ジェネリック型を共変と反変の両方にできるように見えることです。例えば:
Java:
...動作します。
C#相当(?)
...コンパイルに失敗します-コメントのエラーを参照してください。IGenericのジェネリックパラメーターは共分散のために「out」とマークされていないため、これは予想されることです。
これを変更した場合:
これに
エラーはなくなりますが、同じインターフェース内でジェネリックパラメーターを受け取るメソッドの宣言に対して別のエラーが表示されます。
提案?
[やや難しいシナリオについては、フォローアップの質問も参照してください]
java - Java境界ワイルドカード(IInterf )に相当する.NET?
(制限付きの)ワイルドカードジェネリックを使用するJavaコードをC#に変換しようとして立ち往生しています。私の問題は、Javaでは、ワイルドカードを使用すると、ジェネリック型を共変と反変の両方にできるように見えることです。
[これは、制限付きワイルドカードのより単純なケースを扱った前の質問からのスピンオフです]
Java-動作します:
C# -コンパイルされません...
上記に変更interface IGeneric1<T>
するとinterface IGeneric1<out T>
、エラーは消えますが、method1WithParam(T)
差異について不平を言います。