Анонимные объекты

Анонимные объекты

Анонимные объекты используются, когда необходимо создать анонимный объект класса, который не сохраняется в какой-либо переменной. Анонимные объекты наиболее часто используются в качестве обработчиков событий. Например для добавления обработчика события изменения текста в текстовом поле можно использовать такой код (nameField это название переменной, в которой хранится ссылка на текстовое поле id которого равен nameField):

nameField.addTextChangedListener(object: TextWatcher {
    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
    override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
    override fun afterTextChanged(p0: Editable?) {}
})

Также анонимные объекты можно использовать, когда нам нужен объект, но нет необходимости в объявлении нового класса для этого объекта:

var anObject = object {
    var a = 10
    var b = 20
    fun test() {
        println("Hello from anonymous object function a = $a, b = $b")
    }
}

anObject.test()
println(anObject.a)

Анонимные объекты как типы могут быть использованы только в локальных и закрытых (private) объявлениях, в других случаях объекту присваивается тип Any и члены объекта становятся недоступными.