Java Kotlin 单表达式函数的签名
Java signature for Kotlin single-expression functions
我想从 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”签名?
谢谢!
VR
的return类型
private fun onDisconnection(start: Boolean) = eventLayer?.onDisconnection(start)
是任何 eventLayer?.onDisconnection
returns。这至少包括 null
,因为当 eventLayer
为空时,它就是 return。
如果您关心此函数的 return 类型,那么您可能应该声明它。然后你会得到一个编译器错误,因为 null 不是 Unit.
我很确定你可以像这样修复它:
private fun onDisconnection(start: Boolean) : Unit =
eventLayer?.onDisconnection(start) ?: Unit
... 但是将 =
与不产生任何值的表达式一起使用是很奇怪的。你可能应该只用大括号写它。
我想从 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”签名?
谢谢!
VR
private fun onDisconnection(start: Boolean) = eventLayer?.onDisconnection(start)
是任何 eventLayer?.onDisconnection
returns。这至少包括 null
,因为当 eventLayer
为空时,它就是 return。
如果您关心此函数的 return 类型,那么您可能应该声明它。然后你会得到一个编译器错误,因为 null 不是 Unit.
我很确定你可以像这样修复它:
private fun onDisconnection(start: Boolean) : Unit =
eventLayer?.onDisconnection(start) ?: Unit
... 但是将 =
与不产生任何值的表达式一起使用是很奇怪的。你可能应该只用大括号写它。