当前位置: 首页 > 知识库问答 >
问题:

从 Java 调用时,是否可以将“单位”保留为 Kotlin 函数的返回类型?

孟新知
2023-03-14

我在一个密封的类中有一个kotlin函数。

fun invoke(callback: Callback): Unit

Java将方法签名视为返回void的函数。

是否可以指示Kotlin编译器将< code>Unit作为Java的返回类型?(非< code>void)

我的用例是Java的jvm互操作问题,我需要实现(结果)-

// 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个答案

慕容昊焜
2023-03-14
匿名用户

我可能误解了你的问题。

首先,在静态编程语言中,

fun invoke(callback: Callback): Unit

等于

fun invoke(callback: Callback)

在Java中,如果重写这样的函数,则不需要返回任何内容。

是否可以指示Kotlin编译器将< code>Unit作为Java的返回类型?(非< code>void)

不,因为单位是没有意义的。“单位”的唯一有效值是“单位”本身。

俞飞鸣
2023-03-14

在Java中当然可以做到这一点:

public kotlin.Unit test() { return null; }

但在Kotlin中,最好的选择似乎是使用函数对象

val invoke: (Callback) -> Unit = {}

// from Java:
return abstractClass.getInvoke(callback)
马丰
2023-03-14

对于您的边缘情况,您仍然需要处理返回 void 的 Java 方法。因此,只需解决一次:

fun <T> fromConsumer(consumer: Consumer<T>): (T) -> Unit = { consumer.consume(it) }

然后,代替实现< code>(Result) -

 类似资料: