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?
那是因为有两种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)
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |