4

How could I get method reference to property setter without using kotlin-reflect?

Basically, if I'll write my code in java way it's super simple

fun setValue(i: Int) = Unit
val a: (Int) -> Unit = this::setValue

But for var value: Int I'm getting

var value = 1
val a: KMutableProperty0<Int> = this::value
Stepango
  • 4,721
  • 3
  • 31
  • 44

3 Answers3

5

Slightly shorter: just use this::value::set

mrlem
  • 475
  • 4
  • 11
4

this::value is a property reference. It returns a KMutableProperty. To get the setter you will need the setter field of KMutableProperty. So you will need this:

class C {
    var field: Int = 1
    fun getFieldSetter(): (Int) -> Unit{
        return this::field.setter
    }
}
glee8e
  • 6,180
  • 4
  • 31
  • 51
3

Use this::value.setter in order to get the setter reference.

Yoav Sternberg
  • 6,421
  • 3
  • 28
  • 30