引用 Kotlin class 属性 setter 作为函数
Reference to Kotlin class property setter as function
在下面的示例中,t::x
returns 对 属性 getter 的引用。我如何获得 setter 的相同内容?
class Test(var x: String) {}
fun main(args: Array<String>) {
val t = Test("A")
val getter: () -> String = t::x
println(getter()) // prints A
val setter: (String) -> Unit = ????
}
t::x
的return类型是KMutableProperty0<String>
,它有一个setter
属性,所以你可以这样做:
val setter: (String) -> Unit = t::x.setter
setter("B")
println(getter()) // prints B now
使用t::x.setter
,它returns一个MutableProperty0.Setter<T>
,可以作为函数使用:
val setter = t::x.setter
setter("abc")
t::x::set
这可以在没有 kotlin-reflect
的情况下工作,因为它不调用任何外部方法,这与 t::x.setter
不同
不过,使用 lambda 语法时会生成最干净的代码。
在下面的示例中,t::x
returns 对 属性 getter 的引用。我如何获得 setter 的相同内容?
class Test(var x: String) {}
fun main(args: Array<String>) {
val t = Test("A")
val getter: () -> String = t::x
println(getter()) // prints A
val setter: (String) -> Unit = ????
}
t::x
的return类型是KMutableProperty0<String>
,它有一个setter
属性,所以你可以这样做:
val setter: (String) -> Unit = t::x.setter
setter("B")
println(getter()) // prints B now
使用t::x.setter
,它returns一个MutableProperty0.Setter<T>
,可以作为函数使用:
val setter = t::x.setter
setter("abc")
t::x::set
这可以在没有 kotlin-reflect
的情况下工作,因为它不调用任何外部方法,这与 t::x.setter
不过,使用 lambda 语法时会生成最干净的代码。