如何修复Future <cap#1>无法转换为Future <void>?

时间:2017-09-15 11:37:54

标签: java generics concurrency

我需要创建所有任务(在JavaFX中)完成时控制的期货列表。所以我有以下代码。

PivotHeader

import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import javafx.concurrent.Task; ... ExecutorService actionExecutor = ...; List<Future<Void>> futures = new ArrayList<Future<Void>>(); Task<Void> task = new Task<Void>() { @Override public Void call() { .... return null; } }; Future<Void> future = actionExecutor.submit(task); //LINE X futures.add(future); 我得到LINE X。我的错是什么?

1 个答案:

答案 0 :(得分:1)

javafx.concurrent.TaskRunnable,因此当您将其传递给ExecutorService.submit(Runnable)时,会返回Future<?>

如果您希望ExecutorService.submit返回Future<Void>,则必须提交Callable<Void>;或通过actionExecutor.submit(task, null)提供返回值。

或者,更改为使用Future<?>作为变量类型/列表元素类型。