David Soroko
David Soroko

Reputation: 9096

Reference to Kotlin class property setter as function

In the example below, t::x returns a reference to a property getter. How do I obtain the same for a 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 = ????
}

Upvotes: 16

Views: 4783

Answers (3)

Agent_L
Agent_L

Reputation: 5421

t::x::set

This works without kotlin-reflect because it doesn't call any external methods, unlike t::x.setter

Still, the cleanest code is generated when using lambda syntax.

Upvotes: 6

hotkey
hotkey

Reputation: 148139

Use t::x.setter, it returns a MutableProperty0.Setter<T>, which can be used as a function:

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

Upvotes: 14

zsmb13
zsmb13

Reputation: 89638

The return type of t::x is KMutableProperty0<String>, which has a setter property, so you can do this:

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

Upvotes: 6

Related Questions