未来<;T>;与扩展任务的类不兼容<;T>;在Java执行器服务中
我的类未来<;T>;与扩展任务的类不兼容<;T>;在Java执行器服务中,java,concurrency,future,executorservice,Java,Concurrency,Future,Executorservice,我的类DownloadTask扩展javafx.concurrent.Task 将任务提交到执行器服务后,我尝试将结果分配给Future类型的变量。但是,IDE警告我,根据的Javadoc,任务实现了可运行,而不是可调用,我的实例化对象具有泛型类型 因此,当您将其提交给执行服务时,它被视为不返回值的对象,因此生成的未来是未来 或者使用特定于javafx的ExecutorService(不知道是否有专门用于任务的服务);或者让您的类实现可调用的。简短回答 要解决该警告,只需添加类型信息以启用类型推
DownloadTask
扩展javafx.concurrent.Task
将任务提交到
执行器服务
后,我尝试将结果分配给Future
类型的变量。但是,IDE警告我,根据的Javadoc,任务
实现了可运行
,而不是可调用
,我的实例化对象具有泛型类型
因此,当您将其提交给执行服务
时,它被视为不返回值的对象,因此生成的未来是未来
或者使用特定于javafx的
ExecutorService
(不知道是否有专门用于任务的服务);或者让您的类实现可调用的。简短回答
要解决该警告,只需添加类型信息以启用类型推断:
Future<Boolean> result = executor.submit(downloadTask, true);
长答案
正如Andy Turner所说,javafx.concurrent.Task
的继承类型是Runnable
(因为它扩展了FutureTask
实现RunnableFuture
)
将其传递给ExecutorService
的未来提交(Runnable task)
方法将产生未来
结果,IDE将抛出讨厌的未来,您实际上不需要对提交
的结果做任何事情;您的下载任务
已经是未来的
,当它运行时,它将设置自己的结果。由submit
返回的Future
无论如何都不能转发任务的结果,因为它只是将其视为不产生值的Runnable
只需改变这一点:
Future<Boolean> result = executor.submit(downloadTask);
resultList.add(result);
这里的Task
类是什么?大概问题是任务实现了Runnable
,而不是Callable
,因此它返回了Future
@AndyTurner Hi。我不确定我是否理解。根据我读到的内容,我可以使用一个任务并通过提交给执行者来调用它。我对这门课还不熟悉,所以我几乎不懂。但这门“任务”课是什么?我在学校里看不到这样的课。在哪里申报?
Future<Boolean> result = executor.submit(downloadTask, true);
executor.submit(downloadTask);
resultList.add(downloadTask);
Future<Boolean> result = executor.submit(downloadTask, true);
executor.submit(downloadTask);
resultList.add(downloadTask);
Future<Boolean> result = executor.submit(downloadTask);
resultList.add(result);
executor.submit(downloadTask);
resultList.add(downloadTask);