import kotlin.reflect.KProperty class Delegate(var value: T) { operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value operator fun setValue(thisRef: Any?, property: KProperty<*>, newValue: T) { value = newValue } } class DelegateProvider(val value: T) { operator fun provideDelegate(thisRef: Any?, property: KProperty<*>): Delegate = Delegate(value) } fun delegate(value: T): DelegateProvider = DelegateProvider(value) class A { val x by delegate(1) }