我在课堂上有以下方法:
private Future<Integer> myFuture = null;
myFuture = executorVariable
.submit(() -> runFuture());
我把它改为:
myFuture= executorVariable.submit(new Runnable() {
@Override
public void run() {
runFuture()
}
}
但是我收到类型错误。 myFuture
是<Integer>
而不是<?>
。我错过了什么?
答案 0 :(得分:3)
我想你想要一个
new Callable<Integer>() {
@Override public Integer call() {
return runFuture();
}
}
而不是Runnable
。 Runnable
不会返回结果,但Callable
会返回结果。
答案 1 :(得分:2)
submit(Runnable)
的方法ExecutorService
不会产生Future<Integer>
,但Future<?>
的{{1}}返回类型无效。
您可以将结果变量声明更改为Runnable.run()
:
Future<?>
或向执行人提交Future<?> myFuture;
:
Callable<Integer>
或使用myFuture= executorVariable.submit(new Callable<>() {
@Override
public Integer call() {
return runFuture(); // or return some other Integer
}
});
提供默认返回值:
ExectuorService.submit(Runnable, T)
我认为第二种解决方案最适合您,因为orignal语句中的lambda表达式不会产生myFuture= executorVariable.submit(new Runnable() {
@Override
public void run() {
runFuture();
}
} ,(Integer) null /* or some other integer*/);
而只产生Runnable
。