import kotlin.reflect.KProperty interface XEntity class Provider { operator fun provideDelegate(thisRef: XEntity, prop: Any): R = null!! } class Prop { operator fun getValue(receiver: E, prop: Any): V = null!! } fun mkProp(): Provider> = Provider() class MyEnt: XEntity { val d: String by mkProp() }