我为 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 时,我的 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() }
输出:
I'm Callable task.
null
Future
的正确语法是什么? ?
最佳答案
那是因为有两个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
})
关于kotlin - Kotlin 中的并发 Future 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55412969/