このOracle Java チュートリアルから:
WildcardError の例では、コンパイル時にキャプチャ エラーが発生します。
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
このエラー デモンストレーションの後、ヘルパー メソッドを使用して問題を修正します。
public class WildcardFixed {
void foo(List<?> i) {
fooHelper(i);
}
// Helper method created so that the wildcard can be captured
// through type inference.
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
}
i
まず、リストの入力パラメーター ( ) は次のように見なされると彼らは言いますObject
。
この例では、コンパイラは
i
入力パラメーターを Object 型として処理します。
では、なぜ をi.get(0)
返さないのObject
ですか? すでに渡されている場合は?
さらに、 when を使用するポイントは何ですか。<?>
次に、 を使用してヘルパー メソッドを使用する必要があります<T>
。T
推測できるものを直接使用したほうがよいのではないでしょうか?