Kotlin 中的并发 Future 语法
Concurrency Future syntax in Kotlin
我为 Future 使用简单的 java 代码:
Future<Integer> futureTask = executor.submit(() -> {
System.out.println("I'm Callable task.");
return 1 + 1;
});
当我将它粘贴到 kotlin 时 class 它转换为:
val futureTask = executor.submit {
println("I'm Callable task.")
1 + 1
}
但是当我尝试获取 Java class 中的值时,我得到的是 null 而不是 number
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
的正确语法是什么?
那是因为ExecutorService
里面有两个submit
方法,用错了
<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
})
我为 Future 使用简单的 java 代码:
Future<Integer> futureTask = executor.submit(() -> {
System.out.println("I'm Callable task.");
return 1 + 1;
});
当我将它粘贴到 kotlin 时 class 它转换为:
val futureTask = executor.submit {
println("I'm Callable task.")
1 + 1
}
但是当我尝试获取 Java class 中的值时,我得到的是 null 而不是 number
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
的正确语法是什么?
那是因为ExecutorService
里面有两个submit
方法,用错了
<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
})