Kelvin Chung
08/08/2025, 5:44 AMopen class MyFlagDelegate(property: KProperty0<Int>) : ReadOnlyProperty<Any?, Boolean>
class MyMutableFlagDelegate(property: KMutableProperty0<Int>) : MyFlagDelegate(property), ReadWriteProperty<Any?, Boolean>
Is it possible to create an extension function on Int
that returns one of these two delegates, and properly supplying the property
argument? ie.
var myInt: Int
var myFlag: Boolean by MyMutableFlagDelegate(::myInt)
var myFlagAgain: Boolean by myInt.doSomething() // <-- something like this
Nicolai C.
08/08/2025, 10:12 AMmyInt
is still just of type Int
, so what you can do is create a doSomething
extension function on Int
that returns a ReadWriteProperty
instance like the following:
fun Int.doSomething() = object : ReadWriteProperty<Any?, Boolean> {
override fun getValue(thisRef: Any?, property: KProperty<*>): Boolean = TODO()
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Boolean) = TODO()
}
Nicolai C.
08/08/2025, 10:17 AMprovideDelegate
extension function directly on Int
that returns a property delegate, so you do not need to call a special extension function on Int
.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.properties/-property-delegate-provider/provide-delegate.html
Example:
operator fun Int.provideDelegate(thisRef: Any?, property: KProperty<*>) =
object : ReadWriteProperty<Any?, Boolean> {
override fun getValue(thisRef: Any?, property: KProperty<*>): Boolean = TODO()
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Boolean) = TODO()
}