import kotlin.reflect.KProperty class LazyDelegate(val value: T) { operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value } fun lazy(block: () -> T): LazyDelegate = LazyDelegate(block()) fun getAny(): Any? = null fun materialize(): Q = null!! class Test { val resolveMe: String by lazy { materialize() } }