如何在Kotlin中声明可以是字符串或函数的函数参数?
问题描述:
在下面的函数中,我想传递一个html标签的属性。这些属性可以是字符串(test("id", "123")
)或功能(test("onclick", {_ -> window.alert("Hi!")})
):如何在Kotlin中声明可以是字符串或函数的函数参数?
fun test(attr:String, value:dynamic):Unit {...}
我试图声明参数value
如Any
,在科特林根类型。但函数不是Any
类型。申报类型为dynamic
已经工作,但是
-
dynamic
不是一种类型。它只是关闭输入检查参数。 -
dynamic
只适用于kotlin-js(Javascript)。
如何在Kotlin(Java)中编写此函数?函数类型与Any有什么关系?是否有包含功能类型和Any
的类型?
答
你可以只重载函数:
fun test(attr: String, value: String) = test(attr, { value })
fun test(attr: String, createValue:() -> String): Unit {
// do stuff
}
答
你可以写:
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") }
是不是有一个为两种类型创建变量的方法?像'var x:dynamic',其中'x'可以是一个字符串或函数? 'X = “foo” 的; x = {print(...)}' – dilvan