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

java - Java Generics:コレクションに間違ったタイプを追加する

誰がこれを説明できますか?

私はこれらのクラスのカップルを持っています:

そして、これはアクションです:

この例はエラーなしでコンパイルされ、出力は次のとおりです。

しかし、どうすれば犬猫のリストに追加できますか?そして、猫はどのように犬にキャス​​トされますか?

私が使用しているのは、Javaバージョン「1.6.0_24」です。OpenJDKランタイム環境(IcedTea6 1.11.1)(6b24-1.11.1-4ubuntu3)

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

java - JavaGenerics-ワイルドカード

私はJavaを初めて使用し、ジェネリックスの処理方法について誤解していることが明らかな状況に陥りましたが、チュートリアルを読んだり、stackoverflowを検索したりしても、(少なくともこれまでのところ)私が思う以上の明確さは得られませんでした。ワイルドカードを誤用しています。ヘッズアップとして、私はC ++のバックグラウンドを持っているので、それがテンプレートをどのように扱うかは、おそらく私がこれにアプローチした方法を彩っています。

代表的なクラスを使用した継承の基本構造は次のとおりです

それはすべて正しいようです(または少なくとも日食は不平を言っていません)、私がそれらを利用しようとすると問題が発生するようです。私の最初の試みは:

そして、Rawタイプの警告につながりました。だから私は試しました...

しかし、これはエラーにつながります

タイプPacketParser>のメソッドparse(capture#9-of?extends Packet)は、引数(Packet)には適用できません。

この時点で、ジェネリックがどのように機能しているかについて何か誤解していると判断したので、stackoverflowを使用して、間違っている場所を示し、正しい方向に向けることができればと思います。

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

java - 機能する Java API を定義するときのジェネリック ワイルドカードの正しい使用法は何ですか?

一般的な抽象化 (たとえばIterable<T>) の演算子として機能する関数型の静的ヘルパー メソッドを作成していますが、いつワイルドカードを使用する必要があるかについて少し混乱しています。次の場合の正しい、最もタイプ セーフで最も単純なメソッド シグネチャは何ですか? またその理由は何ですか?

  • プロパティの確認:

public static int size(Iterable<?> source)

対。

public static <T> int size(Iterable<T> source)

  • 変換:

public static <T> Iterable<T> take(Iterable<T> source, int count)

対。

public static <T> Iterable<T> take(Iterable<? extends T> source, int count)

  • 組み合わせる:

public static boolean elementsEqual(Iterable<?> first, Iterable<?> second)

対。

public static <T> boolean elementsEqual(Iterable<T> first, Iterable<T> second)

対。

public static <T> boolean elementsEqual(Iterable<? extends T> first, Iterable<? extends T> second)

0 投票する
4 に答える
182 参照

java - Java で共変構造がキャプチャー・オブ・エラーで失敗する

次の Java クラス定義を検討してください。

Cages の共変を定義するときAnimal、Java で次のコードを使用します。

しかし、次のJavaの例...

... 次のエラーでコンパイルに失敗します:

Cage 型のメソッド add(capture#2-of ? extends Animal) は引数に適用できません (Lion)

Tigerそうしないと、後に追加さanimals = lionsれて実行時に失敗する可能性があるため、これが行われますか?

のサブタイプが 1 つしかない場合にそれを拒否しない特別な (仮想的な) ルールを作成できAnimalますか?

( を に置き換えることができることはわかっていますadd。)TAnimal

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

java - 最終上限のあるワイルドカード

Class<? extends Integer>正常にコンパイルされますIntegerが、最終的な型であるため、上限として使用することは意味がありません (何もありませんextend)。

型パラメーターの上限として final 型を使用しようとすると、コンパイラの警告が表示されます。

型パラメーター T は、最終的な型 Integer によって制限されるべきではありません。最終的な型をさらに拡張することはできません

ワイルドカードの上限として final 型を使用してもまったく問題ないのに、型パラメーターに対して警告がスローされるのはなぜでしょうか? なぜ Java は、ワイルドカードが最終的な上位型によって境界付けられることを許可するのですか?

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

java - ワイルドカード型の ArrayList 内に要素を追加する

リスト型パラメーターが拡張されたワイルドカードであるリストに要素を追加しようとしています質問

識別は質問のサブクラスです。QUESTION は抽象クラスです。

それは私にこのエラーを与えています

ライン #1Cannot instantiate the type ArrayList<? extends Question>

そして2号線で

なぜそのようなエラーが表示されるのですか?何が原因ですか?どうすれば修正できますか?

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

java - ジェネリックで型をインスタンス化できません

私はこのクラスを持っています

そして、これを使用してこのクラスから変数を作成しようとしています

そして、それは私にこのエラーを与えています

0 投票する
4 に答える
774 参照

java - 複数のワイルドカード境界

次のクラスがあるとします。

Eitherは、タイプ A または B のいずれかのオブジェクトを 1 つ格納するタイプです get()。その 1 つのオブジェクトを取得します。

get()問題は、返される型が だけでなく、A と B の共通のスーパータイプになるように、ジェネリックを使用して のメソッド シグネチャを変更できるかどうかですObject。たとえば、 anEither<Integer, Long>get()returnを持つことができNumber、 anEither<Deque<T>, Set<T>>get()returnIterable<T>またはCollection<T>を持つことができます。等々。(明らかに、 an にEither<Foo,Foo>get()returnが必要Fooです)。

これが可能な場合、私が持っていた場合Either<List<A>, List<B>>、最も具体的な型は何get()を返すことができますか? raw List、 wildcard List<?>、またはまったく別のものですか?

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

java - SynchronizedCollection()静的ファクトリメソッドの入力パラメータにワイルドカードが含まれていないのはなぜですか?

私は Java チュートリアルを進めていて、理解できないことに出くわしました。Collections Trail では、Wrapper の実装について説明していますが、そこで 2 つの静的ファクトリ メソッドに気付きました。

同期ラッパーが制限付きワイルドカードを使用しないのはなぜですか? つまり、synchronizedCollection の署名が次のようにならないのはなぜですか?

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

java - 下限のワイルドカードを使用したジェネリック

戻りパラメータはMixer<? super Dog>、が下限のワイルドカードで定義されている場合にそうです。

を返すMixer<Object>とコンパイラエラーが発生し、でコンパイラエラーが発生しないのはなぜMixer<Animal>ですか?