Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未来<;T>;与扩展任务的类不兼容<;T>;在Java执行器服务中_Java_Concurrency_Future_Executorservice - Fatal编程技术网

未来<;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);