java - Kotlin 单表达式函数的 Java 签名
问题描述
我有几个想要从 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 不是 Unit。
我很确定你可以像这样修复它:
private fun onDisconnection(start: Boolean) : Unit =
eventLayer?.onDisconnection(start) ?: Unit
=
...但是与不产生任何值的表达式一起使用是很奇怪的。你可能应该只用大括号写它。
推荐阅读
- javascript - 如何在按下按钮时更新 ngx-timeago 语言?
- javascript - 使用递归函数将数组中的每个单词大写
- javascript - 在 404 图像上的 GTM dataLayer 中设置值“img broken”
- wordpress -
为什么要在我的图片 URL 中添加换行符 ( )? - google-chrome - 铬合金。从连接的 Android 设备进行远程调试:CORS 问题
- sql - postgresql中的三元相似度
- python - Scikit-learn:重用模型时在所有行上获得相同的结果
- ios - iOS Safari 音频流播放问题
- python - Python 3.8.5 cv2 -215:断言失败
- webpack - 如何修复:错误:找不到模块'webpack-cli/bin/config-yargs'?