Kotlin 中的并发 Future 语法

Val*_* K. 4 kotlin completable-future

我为 Future 使用简单的 java 代码:

Future<Integer> futureTask = executor.submit(() -> {
    System.out.println("I'm Callable task.");
    return 1 + 1;
});
Run Code Online (Sandbox Code Playgroud)

当我将它粘贴到 kotlin 类时,它会转换为:

val futureTask = executor.submit {
    println("I'm Callable task.")
    1 + 1
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试获取 Java 类中的值时,我得到的是 null 而不是 number

val integ = futureTask.get()
Run Code Online (Sandbox Code Playgroud)

当我在java代码中编写return时,我的ide警告这里不允许return。

接下来是完整的 kotlin 代码:

fun main(args: Array<String>) {
   val executor = Executors.newSingleThreadExecutor()
   val futureTask = executor.submit {
       println("I'm Callable task.")
       1 + 1
   }

   println(futureTask.get())
   executor.shutdown() }
Run Code Online (Sandbox Code Playgroud)

输出:

I'm Callable task.
null
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法Future

cle*_*p6r 5

那是因为有两种submit方法ExecutorService,并且使用了错误的一种。

<T> Future<T> submit(Callable<T> task);

Future<?> submit(Runnable task);
Run Code Online (Sandbox Code Playgroud)

您的 lambda 函数被转换为 Runnable 而不是 Callable。您可以按如下方式解决此问题:

val futureTask = executor.submit(Callable {
    println("I'm Callable task.")
    1 + 1
})
Run Code Online (Sandbox Code Playgroud)