// SomeClass.kt interface SomeInterface { fun someMethod() } private class SomeClassProxy( private var someClass: SomeClass? ): SomeInterface { override fun someMethod() { someClass?.someMethod() } } class SomeClass private constructor(): SomeInterface { fun someMethod() { println("Hello"); } companion object { fun useNew(func: SomeInterface.() -> Unit) { val someClass = SomeClass() val proxy = SomeClassProxy(someClass) proxy.func() proxy.someClass = null } } } ​ // Main.kt fun main() { var sc: SomeClass? = null SomeClass.useNew { this.someMethod() sc = this // I want this not to be possible } sc?.someMethod() // or at least this }