class TestClass : AutoCloseable { @Volatile private var isClosed = false var listener: (() -> Unit)? = null set(value) { if (isClosed && (value != null)) { throw IllegalStateException("Object shouldn't be used anymore because it is closed") } field = value } override fun close() { isClosed = true listener = null } }