我编写了一个 Kotlin 函数,它消耗 List<String>
。该函数有一个注释 @JsName
这样我就可以从 JavaScript 调用这个函数。我无法确定我应该将什么传递给这个函数。传递 JavaScript 数组不起作用,因为 Kotlin-JS 代码调用 iterator
在物体上。此外,Kotlin 标准库中的名称都被破坏了;所以我不能以任何可靠的方式打电话说 listOf
在 JavaScript 中并将结果传递给函数。
问题是,如果 Kotlin 标准库名称被破坏,我们应该如何创建除了简单类型(数字、字符串等)之外的对象函数并将其传递给对象函数?
最佳答案
在 Kotlin 中与 JavaScript 互操作时,您可以使用 ArrayList,因为 List
是一个接口(interface)(JavaScript 中没有),其实际实现(之一)是 ArrayList
.
当您处理List<String>
时,您可以在 JavaScript 中执行此操作:
let list = new kotlin.kotlin.collections.ArrayList(["foo","bar","baz"])
您可以通过list
变量到需要 List<String>
的函数参数。
备注:
- 您可以调用
list.toArray()
如果您的某些 Kotlin 函数返回列表,则将列表从 Kotlin 转换回 JavaScript 数组。 - 我会声明“中间人”(适配器)函数,将项目推送到
List
,需要MutableList
并调用add
,因为库函数被破坏了。 (我也想要一个更合适的方法来做到这一点) - 如果您需要处理自定义对象列表,例如类
Foo
,您应该可以调用new <package>.<identifier>...Foo(params)
.
关于javascript - 从 JavaScript 使用 Kotlin 标准库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57513347/