Object
https://kotlinlang.org/docs/object-declarations.html |
object
Одновременно объявляет класс и его экземпляр. Singleton. Инициализируется один раз при первом обращении. Другое назначение - анонимный класс.
data object
Объект с чистым представлением toString
.
object MyObject
data object MyDataObject
fun main() {
println(MyObject) // org.example.MyObject@1f32e575
println(MyDataObject) // MyDataObject
}
companion object
Object, объявленный внутри класса. Функции такого объекта можно вызывать через класс. companion object
отличается тем, что инициализируется в момент загрузки своего родительского класса, анонимные объекты инициализируются сразу же где используются, а обычные object
лениво при первом доступе.
Анонимный объект
Объекты анонимных классов которые явно не объявлены с помощью class
полезны для одноразового использования. Можно объявить их с нуля, наследовать от существующих классов или реализовать интерфейсы.
val helloWorld: Any = object {
val hello = "Hello"
val world = "World"
// тип анонимных объектов - Any, поэтому `override` необходим в `toString()`
override fun toString() = "$hello $world"
}
binding.root.setOnClickListener(object: View.OnClickListener {
override fun onClick(v: View?) {
// perform click
}
})
Kotlin Object. Вопросы на собесе
- Зачем нужен companion object?
- Когда инициализируется companion object?
- Можно ли наследоваться от object?