如何将嵌套的Java 8 future转换为Java 1.6?

时间:2015-01-16 23:37:21

标签: java

我在课堂上有以下方法:

private Future<Integer> myFuture = null;
myFuture = executorVariable
            .submit(() -> runFuture());

我把它改为:

myFuture= executorVariable.submit(new Runnable() {
    @Override
    public void run() {
        runFuture()
    }
} 

但是我收到类型错误。 myFuture<Integer>而不是<?>。我错过了什么?

2 个答案:

答案 0 :(得分:3)

我想你想要一个

new Callable<Integer>() {
  @Override public Integer call() {
    return runFuture();
  }
}

而不是RunnableRunnable不会返回结果,但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