3

在以下函数中,我想将 html 标记的属性传递给它。这些属性可以是字符串 ( test("id", "123")) 或函数 ( test("onclick", {_ -> window.alert("Hi!")})):

fun test(attr:String, value:dynamic):Unit {...}

我试图将参数声明valueAnyKotlin 中的根类型。但是函数不是 type Any。声明类型为dynamic工作,但是

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

如何在 Kotlin (Java) 中编写此函数?函数类型与 Any 有什么关系?是否存在同时包含函数类型和 的类型Any

4

2 回答 2

6

你可以重载函数:

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

fun test(attr: String, createValue: () -> String): Unit {
    // do stuff
}
于 2017-10-11T18:34:25.613 回答
2

你可以写:

fun test(attr: String, string: String? = null, lambda: (() -> Unit)? = null) {
  if(string != null) { // do stuff with string }
  if(lambda != null) { // do stuff with lambda }
  // ...
}

然后通过以下方式调用该函数:

test("attr")
test("attr", "hello")
test("attr", lambda = { println("hello") })
test("attr") { println("hello") }
test("attr", "hello", { println("hello") })
test("attr", "hello") { println("hello") }
于 2017-10-11T19:29:46.627 回答