如何在Kotlin中声明一个可以是字符串或函数的函数参数?

dil*_*van 3 types dynamic kotlin kotlin-interop

在下面的函数中,我想传递一个html标记的属性.这些属性可以是strings(test("id", "123"))或functions(test("onclick", {_ -> window.alert("Hi!")})):

fun test(attr:String, value:dynamic):Unit {...}
Run Code Online (Sandbox Code Playgroud)

我试图将参数声明valueAnyKotlin中的根类型.但功能不是类型Any.将类型声明为dynamic有效,但是

  • dynamic不是一种类型.它只是关闭键入检查参数.
  • dynamic 仅适用于kotlin-js(Javascript).

如何在Kotlin(Java)中编写此函数?函数类型如何与Any相关?是否有包含两种函数类型的类型Any

zsm*_*b13 6

你可以重载函数:

fun test(attr: String, value: String) = test(attr, { value })

fun test(attr: String, createValue: () -> String): Unit {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)