引用Kotlin类属性setter作为函数

时间:2017-03-18 12:04:52

标签: kotlin kotlin-reflect

在下面的示例中,t::x返回对属性getter的引用。如何为二传手获得同样的东西?

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 = ????
}

2 个答案:

答案 0 :(得分:6)

使用t::x.setter,它会返回MutableProperty0.Setter<T>,可用作函数:

val setter = t::x.setter
setter("abc")

答案 1 :(得分:2)

t::x的返回类型为KMutableProperty0<String>,其属性为setter,因此您可以这样做:

val setter: (String) -> Unit = t::x.setter
setter("B")
println(getter()) // prints B now