我为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
的正确语法是什么?
答案 0 :(得分:1)
这是因为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
})