問題タブ [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)
私は次のようなものを持っています:
しかし、IntelliJ は次のように報告しています。
- エラー:(46, 18) java: > 予期される
- エラー:(46, 19) java: 不正なタイプの開始
- エラー:(46, 26) Java: '(' が必要です
- エラー:(46, 28) java: < 識別子 > が必要です
- エラー:(46, 29) Java: 'l' が必要です
- エラー:(46, 43) java: < 識別子 > が必要です
どうしたの?名前を下限にバインドすることはできませんか? またはR&X
、上限でのみ式を使用できますか?
それをに変更する
収量
- エラー (46、31) java: > 予想
- エラー (46、32) Java: '(' が必要です
- エラー (46、33) java: 不正な型の開始
java - Java: Generic Interface、実行時に選択されるインスタンス
次のシンプルなインターフェースがあります。
および次のような実装
と
両方SimpleResourceDescriptor
とLabelsCommentsResourceDescriptor
拡張
実行時に、メソッドを呼び出します
これは、ResourceDescriptor の特定のインスタンスに依存する ISimmilarityMeasure のインスタンス「sim」を返します。
ResourceDescriptor[] candidates
また、実行時に、特定の ISimmilarityMeasure オブジェクトに必要な ResourceDescriptor 型のインスタンスを保持する配列も作成します。
sim.getSim(candidates[0], candidates[1])
ただし、コンパイラを呼び出そうとすると、
私はEclipseを使用しています.simに利用可能なメソッドを見ると、getSim(null s, null t)
. なぜそうなのかわかりません。getSim が ResourceDescriptor を予期する必要があり、すべてのオブジェクトcandidates
が ResourceDescriptor であるため、呼び出しを許可することをコンパイラーに明確にすべきではないでしょうか? 特定の ISimmilarityMeasure が特定のタイプの ResourceDescriptor を期待しているが、別のタイプが渡された場合、実行時に例外になるべきではありませんか?
java - ジェネリックを使用して共通のスーパータイプを Java に格納する
異なるタイプの T と S の 2 つの List を取り、両方の要素を含む 1 つの List を返す "mix" メソッドがあるとします。型の安全性のために、返される List が R 型であることを指定したいと思います。ここで、R は T と S の両方に共通のスーパータイプです。たとえば、次のようになります。
これを指定するには、メソッドを次のように宣言します。
mix
しかし、クラスで static ではなくインスタンス メソッドを作成したい場合はどうすればよいList2<T>
でしょうか。
<T>
のインスタンスで をシャドウするList2
ので、それは良くありません。
シャドーイングの問題を解決しますが、コンパイラには受け入れられません
下限のワイルドカードは名前付き変数に格納できないため、コンパイラによって拒否されます (? super X
式でのみ使用されます) 。
のように、引数をクラス自体に移動することもできますList2<R, T extends R, S extends R>
が、型情報は実際にはインスタンス レベルにあるわけではありません。これは、1 つのメソッド呼び出しにしか使用されず、必要なたびにオブジェクトを再キャストする必要があるためです。異なる引数でメソッドを呼び出します。
私が知る限り、ジェネリックでこれを行う方法はありません。私ができる最善List2
の方法は、ジェネリックが導入される前のように、生を返し、呼び出しサイトでキャストすることです。誰かがより良い解決策を持っていますか?
java - Java では、ジェネリック型のインスタンスで getClass を呼び出すときに生の型を避けるにはどうすればよいですか?
Javaでこれがあるとします:
最後の式の型は ですClass<? extends List>
。消去によりClass<? extends List<String>>
. しかし、なぜそれができないのClass<? extends List<?>>
でしょうか?
この式の結果を、このクラスが実際に何らかの情報を保持する変数に代入したい場合、チェックされていないキャストの警告と生の型の警告の両方を回避する方法はありませんList
か?
java - 境界付きワイルドカード関連のコンパイラ エラー
このコードの何が問題なのか疑問に思っています:
コンパイラは次のエラー メッセージを表示します。
Set<Map.Entry<capture#1-of ? extends String,capture#2-of ? extends Integer>>
型の不一致: からに変換できませんSet<Map.Entry<? extends String,? extends Integer>>
の種類は何s
ですか?Eclipse は示唆してSet<?>
いますが、私はそれよりも具体的にしようとしています。
java - Java ワイルドカードの書き込みと読み取りのアクセス許可
Javaワイルドカードについて学んでいるときに、このテーマについて誤解していることに気づきました。
Upper Bound
ジェネリック クラスのメンバーを読み取り専用にすることができますLower Bound
メンバーへの書き込みを許可しますが、それが型の下限である場合のみです
コンパイラは、リストの要素が正しい型であることを保証できないため、ここに何も記述できません (後で読むため)。
これは、コンパイラが最下位の型が常に Car であることを保証できるために発生します。そして、Carのみを渡すことができます。私は正しいですか?
java - ネストされた境界付きワイルドカード
次のコードをコンパイルしようとすると:
型の互換性がないというエラーが表示されます。
拡張する要素を持つ s である要素LinkedList
を含むa を持つにはどうすればよいですか?List
Number
numList
明確にするために、次の方法でリストを追加しようとしています。
numList.add(new LinkedList<Integer>());