我在密封的课程中有一个kotlin函数 .
fun invoke(callback: Callback): Unit
Java将方法签名视为返回 void
的函数 .
是否可以指示Kotlin编译器将 Unit
保留为Java的返回类型? (不是 void
)
用例
我的用例是来自Java的jvm互操作问题,我需要实现 (Result) -> Unit
.
// inside a java method (currently)
abstractClass.invoke(callback)
return Unit.INSTANCE
// what I'd prefer instead
return abstractClass.invoke(callback) // invoke returns Unit, but it's in Kotlin, so it maps to void in Java. So this doesn't work
3 回答
对于你的边缘情况,你仍然需要处理返回
void
的Java方法 . 所以只需解决一次:然后不是直接实现
(Result) -> Unit
,而是实现/创建Consumer<Result>
并将其传递给此函数 . 它也可以用Java编写,只会更复杂 .在Java中肯定可以这样做:
但在Kotlin中,你最好的选择似乎是使用一个函数对象:
我可能误解了你的问题 .
首先,在Kotlin,
相当于
在Java中,如果覆盖这样的函数,则不需要返回任何内容 .
不,因为
Unit
毫无意义 .Unit
的唯一有效值是Unit
本身 .