如何在 Kotlin 的 JS 接口中使用可选参数调用
Posted
技术标签:
【中文标题】如何在 Kotlin 的 JS 接口中使用可选参数调用【英文标题】:How to call with optional params in JS interface for Kotlin 【发布时间】:2019-11-11 20:59:51 【问题描述】:我在 Kotlin 中有一个 javascript 桥接方法,例如,
@JavascriptInterface
fun add(a: Int? = 0, b: Int? = 0): Int
return a + b
如果我想用默认值调用,如何从 web app js 调用这个方法?
android.add(null, null) // OR
android.add() // OR
android.add(a = 0, b = 0)// OR
还是什么?
【问题讨论】:
如果没有提供值,会使用默认值,所以android.add()就可以了。 @Kobe 如果我想为android.add(b=5)
之类的东西工作怎么办?还是仅使用 android.add(1)
之类的第一个参数?他们被允许吗?
【参考方案1】:
要使用参数undefined
的默认值,应作为参数传递。可以这样做:
android.add() // empty arguments means all of them are undefined so defaults are used
android.add(1) // a == 1, b == undefined so the default value (0) is used
android.add(void 0, 2) // a == undefined and its default (0) is used, b == 2
【讨论】:
谢谢罗曼。我仍然对android.add(void 0, 2)
感到困惑,为什么从调用者 js 端提供默认值?它已经在本机方面定义了吗?你是说android.add(void, 2)
吗?
如果我猜对了,void 0
只是一个表达式,当void
不是表达式时,它保证是undefined
。【参考方案2】:
您也可以使用annotation
@JvmOverloads
这会在 @JavaScriptInterface 的编译字节码中生成重载方法。
您可以轻松调用
android.add()
从 JS 调用你的方法的默认参数, 仍然保持您的代码惯用语。
【讨论】:
以上是关于如何在 Kotlin 的 JS 接口中使用可选参数调用的主要内容,如果未能解决你的问题,请参考以下文章