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>andList<B>时,A 和 B 必须完全匹配。由于Future<Boolean>与 不完全相同Future<?>,因此不起作用。

Future<Boolean>是 的子类型Future<?>,但这还不够。即使 A 是 B 的List<A>子类型,也不是的子类型。List<B>

我们在类型参数中使用通配符,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 回答