使用来自 JavaScript 的 Kotlin 标准库
Using Kotlin standard library from JavaScript
我编写了一个消耗 List<String>
的 Kotlin 函数。该函数有一个带有 @JsName
的注释,因此我可以从 JavaScript 调用该函数。我无法确定应该将什么传递给此函数。传递 JavaScript 数组不起作用,因为 Kotlin-JS 代码在对象上调用 iterator
。此外,Kotlin 标准库中的名称都被打乱了;所以我不能以任何可靠的方式在 JavaScript 中调用 say listOf
并将结果传递给函数。
那么问题是,如果 Kotlin 标准库名称被破坏,我们应该如何创建并传递给对象函数?
您可以在 Kotlin 中与 JavaScript 互操作时使用 ArrayList,因为 List
是一个接口(不在 JavaScript 中)并且(其中之一)它的实际实现是ArrayList
.
在处理 List<String>
时,您可以在 JavaScript:
中执行此操作
let list = new kotlin.kotlin.collections.ArrayList(["foo","bar","baz"])
并且您可以将 list
变量传递给需要 List<String>
参数的函数。
备注:
- 如果您的某些 Kotlin 函数 returns 列表,您可以调用
list.toArray()
将列表从 Kotlin 转换回 JavaScript 数组。
- 我会声明 "middleman"(适配器)函数,将项目推送到
List
,需要 MutableList
并调用 add
,因为库函数是损坏。 (我也想要一个更合适的方法)
- 如果您需要处理自定义对象列表,例如class
Foo
,你应该可以调用 new <package>.<identifier>...Foo(params)
.
我编写了一个消耗 List<String>
的 Kotlin 函数。该函数有一个带有 @JsName
的注释,因此我可以从 JavaScript 调用该函数。我无法确定应该将什么传递给此函数。传递 JavaScript 数组不起作用,因为 Kotlin-JS 代码在对象上调用 iterator
。此外,Kotlin 标准库中的名称都被打乱了;所以我不能以任何可靠的方式在 JavaScript 中调用 say listOf
并将结果传递给函数。
那么问题是,如果 Kotlin 标准库名称被破坏,我们应该如何创建并传递给对象函数?
您可以在 Kotlin 中与 JavaScript 互操作时使用 ArrayList,因为 List
是一个接口(不在 JavaScript 中)并且(其中之一)它的实际实现是ArrayList
.
在处理 List<String>
时,您可以在 JavaScript:
let list = new kotlin.kotlin.collections.ArrayList(["foo","bar","baz"])
并且您可以将 list
变量传递给需要 List<String>
参数的函数。
备注:
- 如果您的某些 Kotlin 函数 returns 列表,您可以调用
list.toArray()
将列表从 Kotlin 转换回 JavaScript 数组。 - 我会声明 "middleman"(适配器)函数,将项目推送到
List
,需要MutableList
并调用add
,因为库函数是损坏。 (我也想要一个更合适的方法) - 如果您需要处理自定义对象列表,例如class
Foo
,你应该可以调用new <package>.<identifier>...Foo(params)
.