Kotlin中的并发未来语法

问题描述 投票:1回答:1

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

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

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

val futureTask = executor.submit {
    println("I'm Callable task.")
    1 + 1
}

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

val integ = futureTask.get()

当我用Java代码编写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() }

输出:

I'm Callable task.
null

Future的正确语法是什么?

kotlin completable-future
1个回答
0
投票

这是因为submit中有两种ExecutorService方法,而使用了错误的方法。

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

Future<?> submit(Runnable task);

您的lambda函数将转换为Runnable而不是Callable。您可以通过以下方法解决此问题:

val futureTask = executor.submit(Callable {
    println("I'm Callable task.")
    1 + 1
})
© www.soinside.com 2019 - 2024. All rights reserved.