不能使用List <future <?>&gt;在从不同的地方调用时的方法参数</future <?>

时间:2012-11-07 14:19:49

标签: java list generics

在我的代码中,我有多个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>>>和其他几个人工作。

2 个答案:

答案 0 :(得分:3)

使用此:

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

当您有List<A>List<B>时,A和B必须完全匹配。由于Future<Boolean>Future<?>不完全相同,因此无效。

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

我们在List的类型参数中使用通配符,因此它不必完全匹配。

答案 1 :(得分:2)

使用此:

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

由于Future<Boolean>不是Future<?>

的扩展名

http://ideone.com/tFECPN