将“ Callable <T>” Java方法转换为Kotlin

Jer*_*rry 3 kotlin

我正在尝试转换Java方法:

private <T> Callable<T> createCallable(final Callable<T> task) {
    return () -> {
        try {
            return task.call();
        } catch (Exception e) {
            handle(e);
            throw e;
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

从以下Java文件ExceptionHandlingAsyncTaskExecutor.java进入Kotlin。

该代码使用IntelliJ IDEA自动转换为:

private fun <T> createCallable(task: Callable<T>): Callable<T> {
    return {
        try {
            return task.call()
        } catch (e: Exception) {
            handle(e)
            throw e
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是不正确的。但是我必须考虑应该采用哪种正确的实现方式。有任何想法吗?

Mib*_*bac 7

我认为这是Kotlin转换器错误。它将您的代码转换为() -> T而不是Callable<T>(基本上是相同的,但实际上是不同的类型)。这是工作代码

private fun <T> createCallable(task: Callable<T>): Callable<T> {
    return Callable {
        try {
            task.call()
        } catch (e: Exception) {
            handle(e)
            throw e
        }
    }
}
Run Code Online (Sandbox Code Playgroud)