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