6

私のコードには複数のインスタンスがList<Future<something>>あり、それらが完了するまでの待機を処理する単一のメソッドが必要でした。しかし、コンパイラの例外が発生し、それを通知しactual argument List<Future<Boolean>> cannot be converted to List<Future<?>>ます。

これはメソッドヘッドです:

public void waitForIt(<List<Future<?>> params)

そしてこれはそれがどのように呼ばれるかです:

...
List<Future<Boolean>> actions = new ArrayList<Future<Boolean>>();
waitForIt(actions); <-- compiler error here
...

私はこれがList<Future<Map<String, String>>>他のいくつかのために働くために必要です。

4

2 に答える 2

3

これを使って:

public void waitForIt(List<? extends Future<?>> params)

List<A>とがある場合List<B>、AとBは完全に一致する必要があります。Future<Boolean>とまったく同じではないためFuture<?>、機能しません。

Future<Boolean>はのサブタイプですがFuture<?>、それだけでは不十分です。AがBのサブList<A>タイプであっても、はのサブタイプではありません。List<B>

のtypeパラメーターにワイルドカードを使用して、完全にList一致する必要がないようにします。

于 2012-11-07T19:47:00.400 に答える
2

これを使って:

public <T> void waitForIt(List<Future<T>> params)

Future<Boolean>拡張子ではないようにFuture<?>

http://ideone.com/tFECPN

于 2012-11-07T14:38:14.903 に答える