当从Java调用Kotlin函数的时候可能把`Unit`作为返回types吗?
我在密封的类中有一个kotlin函数。
fun invoke(callback: Callback): Unit
Java将方法签名视为返回void
的函数。
是否可以指示Kotlin编译器将Unit
保留为Java的返回types? (不是void
)
用例
我的用例是Java中的jvm interop问题,我需要实现(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
对于你的边缘情况,你仍然必须处理返回void
Java方法。 所以只需解决一次:
fun fromConsumer(consumer: Consumer ): (T) -> Unit = { consumer.consume(it) }
然后不是直接实现(Result) -> Unit
,而是实现/创建一个Consumer
并将其传递给这个函数。 它也可以用Java编写,只是会更复杂。
在Java中这样做肯定是可能的:
public kotlin.Unit test() { return null; }
但是在Kotlin中,你最好的选择似乎是使用一个函数对象:
val invoke: (Callback) -> Unit = {} // from Java: return abstractClass.getInvoke(callback)
我可能误解了你的问题。
首先,在Kotlin,
fun invoke(callback: Callback): Unit
相当于
fun invoke(callback: Callback)
在Java中,如果你重写这样的函数,你不需要返回任何东西。
是否可以指示Kotlin编译器将
Unit
保留为Java的返回types? (不是void
)
不,因为Unit
毫无意义。 Unit
唯一有效的价值是Unit
本身。