問題タブ [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 投票する
1 に答える
1409 参照

java - 下限ワイルドカードを使用した「予期しないトークン」(Java)

私は次のようなものを持っています:

しかし、IntelliJ は次のように報告しています。

  1. エラー:(46, 18) java: > 予期される
  2. エラー:(46, 19) java: 不正なタイプの開始
  3. エラー:(46, 26) Java: '(' が必要です
  4. エラー:(46, 28) java: < 識別子 > が必要です
  5. エラー:(46, 29) Java: 'l' が必要です
  6. エラー:(46, 43) java: < 識別子 > が必要です

どうしたの?名前を下限にバインドすることはできませんか? またはR&X、上限でのみ式を使用できますか?

それをに変更する

収量

  1. エラー (46、31) java: > 予想
  2. エラー (46、32) Java: '(' が必要です
  3. エラー (46、33) java: 不正な型の開始
0 投票する
1 に答える
238 参照

java - Java: Generic Interface、実行時に選択されるインスタンス

次のシンプルなインターフェースがあります。

および次のような実装

両方SimpleResourceDescriptorLabelsCommentsResourceDescriptor拡張

実行時に、メソッドを呼び出します

これは、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 を期待しているが、別のタイプが渡された場合、実行時に例外になるべきではありませんか?

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

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の方法は、ジェネリックが導入される前のように、生を返し、呼び出しサイトでキャストすることです。誰かがより良い解決策を持っていますか?

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

java - Java では、ジェネリック型のインスタンスで getClass を呼び出すときに生の型を避けるにはどうすればよいですか?

Javaでこれがあるとします:

最後の式の型は ですClass<? extends List>。消去によりClass<? extends List<String>>. しかし、なぜそれができないのClass<? extends List<?>>でしょうか?

この式の結果を、このクラスが実際に何らかの情報を保持する変数に代入したい場合、チェックされていないキャストの警告生の型の警告の両方を回避する方法はありませんListか?

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

java - 境界付きワイルドカード関連のコンパイラ エラー

このコードの何が問題なのか疑問に思っています:

コンパイラは次のエラー メッセージを表示します。

Set<Map.Entry<capture#1-of ? extends String,capture#2-of ? extends Integer>>型の不一致: からに変換できませんSet<Map.Entry<? extends String,? extends Integer>>

の種類は何sですか?Eclipse は示唆してSet<?>いますが、私はそれよりも具体的にしようとしています。

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

java - Java ワイルドカードの書き込みと読み取りのアクセス許可

Javaワイルドカードについて学んでいるときに、このテーマについて誤解していることに気づきました。

  1. Upper Boundジェネリック クラスのメンバーを読み取り専用にすることができます
  2. Lower Boundメンバーへの書き込みを許可しますが、それが型の下限である場合のみです

コンパイラは、リストの要素が正しい型であることを保証できないため、ここに何も記述できません (後で読むため)。

これは、コンパイラが最下位の型が常に Car であることを保証できるために発生します。そして、Carのみを渡すことができます。私は正しいですか?

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

java - ネストされた境界付きワイルドカード

次のコードをコンパイルしようとすると:

型の互換性がないというエラーが表示されます。

拡張する要素を持つ s である要素LinkedListを含むa を持つにはどうすればよいですか?ListNumber

numList明確にするために、次の方法でリストを追加しようとしています。

numList.add(new LinkedList<Integer>());