我在一个密封的类中有一个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
我可能误解了你的问题。
首先,在静态编程语言中,
fun invoke(callback: Callback): Unit
等于
fun invoke(callback: Callback)
在Java中,如果重写这样的函数,则不需要返回任何内容。
是否可以指示Kotlin编译器将< code>Unit作为Java的返回类型?(非< code>void)
不,因为单位
是没有意义的。“单位”
的唯一有效值是“单位”
本身。
在Java中当然可以做到这一点:
public kotlin.Unit test() { return null; }
但在Kotlin中,最好的选择似乎是使用函数对象:
val invoke: (Callback) -> Unit = {}
// from Java:
return abstractClass.getInvoke(callback)
对于您的边缘情况,您仍然需要处理返回 void
的 Java 方法。因此,只需解决一次:
fun <T> fromConsumer(consumer: Consumer<T>): (T) -> Unit = { consumer.consume(it) }
然后,代替实现< code>(Result) -
我正在尝试使用具体化类型的函数作为扩展函数,但我认为这是不可能的,因为在我检查生成的字节码后,我发现方法签名是私有的,有什么办法可以将其公开? CommonExtensions.kt 静态编程语言字节码: 客户代码: 静态编程语言文件 Java档案
我有一个通知组件,我有一个超时设置。超时后,我调用。 我想做的是,如果已经超时,我想只呈现任何内容: 问题是: 返回();//这里有一些语法错误
有以下功能: 为了更准确,我使用Java中的泛型类型定义了返回的,即,但它不起作用,出现错误: 类型对象不可下标 问:是否有可能定义返回的与泛型类型?
问题内容: 是否可以从Java调用COM API(特别是HP / Mercury Quality Center OTA API)?如果是这样,最好的方法是什么? 像JACOB一样合适吗? 代码片段对于基础知识会有所帮助:-) 问题答案: jacob:是的,http://sourceforge.net/projects/jacob- project/ 是一个活跃的项目,可以很好地满足您的目的。 您可
问题内容: 我想创建一个名为“ new”的函数和一个名为“ case”的类。 我可以用PHP做到吗? 问题答案: 不,你 不能。感谢上帝。