You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何获取Void值以适配要求返回Void的函数?

Kotlin中使用java9 CompletableFuture的exceptionally方法返回值问题解决

在Kotlin中使用java9.util.concurrent.CompletableFuture时,其exceptionally方法要求接收一个(Throwable) -> Void!类型的函数,该函数会在调用completeExceptionally时触发。

尝试以下写法时:

myCompletableFuture.exceptionally { exception ->
    doSomethingWith(exception)
}

IDE会提示返回的是Unit,不符合Void!的类型要求。

改用以下写法后:

myCompletableFuture.exceptionally { exception ->
    doSomethingWith(exception)
    val returnValue: Void by Delegates.notNull()
    returnValue
}

执行时会抛出异常:

java.lang.IllegalStateException: Property returnValue should be initialized before get.
    at kotlin.properties.NotNullVar.getValue(Delegates.kt:62)

不需要完全避免使用CompletableFuture,有几种可行的解决方式:

  • 直接返回null:Java中的Void类型本身没有实例,只能用null表示,而Void!是Kotlin对其的可空类型适配,直接返回null即可满足要求:
myCompletableFuture.exceptionally { exception ->
    doSomethingWith(exception)
    null
}
  • 显式指定返回类型:如果IDE类型推断出现问题,可以在lambda中显式声明返回类型,避免歧义:
myCompletableFuture.exceptionally { exception: Throwable ->
    doSomethingWith(exception)
    null as Void?
}

另外补充:如果项目环境允许,优先使用标准Java 8+的java.util.concurrent.CompletableFuture,它与Kotlin的兼容性更好,exceptionally方法的返回值逻辑更贴合Kotlin的类型系统,不会出现Void相关的适配问题。

内容的提问来源于stack exchange,提问作者Alfredo Tostón

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:16:01