如何在 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 接口中使用可选参数调用的主要内容,如果未能解决你的问题,请参考以下文章

如何在kotlin中使用self类型参数作为接口

Kotlin - 检查通用参数是否可选?

如何在 Node.js server.listen() 中使用可选的主机名参数

Dart语法之可选参数

在 Kotlin 中将接口作为参数传递

Kotlin 接口