gpt4 book ai didi

Kotlin 单表达式函数的 Java 签名

转载 作者:行者123 更新时间:2023-12-02 03:01:25 25 4
gpt4 key购买 nike

我想从 JNI 调用几个 Kotlin 方法。

根据我当前的实现,我在 Kotlin 端有以下源代码。

    var eventLayer: EventInterface? = null

private fun onDisconnection(start: Boolean) {
eventLayer?.onDisconnection(start)
}

方法签名是“onDisconnection(Z)V”,一切正常。

对于这样一个简单的方法,我正在考虑使用单表达式函数。类似的东西。

    var eventLayer: EventInterface? = null

private fun onDisconnection(start: Boolean) = eventLayer?.onDisconnection(start)

运行我的应用程序时,出现(不是预期的!)NoSuchMethod 异常,我检查了方法签名,该签名更改为“onDisconnection(Z)Ljava/lang/Void;”

有人可以解释一下这个细微的差别吗?有没有办法让单表达式函数具有相同的“(Z)V”签名?

谢谢!

虚拟现实

最佳答案

返回类型

private fun onDisconnection(start: Boolean) = eventLayer?.onDisconnection(start)

eventLayer?.onDisconnection 返回的内容。这至少包括 null,因为这是当 eventLayer 为 null 时返回的内容。

如果您关心此函数的返回类型,那么您可能应该声明它。然后你会得到一个编译器错误,因为 null 不是 Unit。

我很确定你可以像这样修复它:

private fun onDisconnection(start: Boolean) : Unit = 
eventLayer?.onDisconnection(start) ?: Unit

...但是将 = 与不产生任何值的表达式一起使用是很奇怪的。你可能应该用大括号来写它。

关于Kotlin 单表达式函数的 Java 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61388842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com