当从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本身。