引用Kotlin类属性setter作为函数

Dav*_*oko 10 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 = ????
}
Run Code Online (Sandbox Code Playgroud)

hot*_*key 8

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

val setter = t::x.setter
setter("abc")
Run Code Online (Sandbox Code Playgroud)


zsm*_*b13 6

的返回类型t::xKMutableProperty0<String>,它有一个setter属性,所以你可以这样做:

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


Age*_*t_L 5

t::x::set
Run Code Online (Sandbox Code Playgroud)

这不需要任何外部方法kotlin-reflect,因为它不调用任何外部方法,这与t::x.setter

尽管如此,使用 lambda 语法仍会生成最简洁的代码。