Існує два різних типи object
використання, вираз та декларація .
Вираз об’єкта
Вираз об'єкта можна використовувати, коли клас потребує незначної модифікації, але не потрібно створювати для нього абсолютно новий підклас. Хорошим прикладом цього є анонімні внутрішні класи.
button.setOnClickListener(object: View.OnClickListener() {
override fun onClick(view: View) {
}
})
Одного, на що слід звернути увагу, є те, що анонімні внутрішні класи можуть отримувати доступ до змінних із охоплюючої області, і ці змінні не повинні бути final
. Це означає, що змінна, яка використовується всередині анонімного внутрішнього класу, не розглядаєтьсяfinal
може несподівано змінити значення перед тим, як до нього отримати доступ.
Декларація об’єкта
Оголошення об'єкта подібне до оголошення змінної, і тому не може використовуватися в правій частині оператора присвоєння. Оголошення об'єктів дуже корисні для реалізації шаблону Singleton.
object MySingletonObject {
fun getInstance(): MySingletonObject {
}
}
І тоді getInstance
метод можна викликати таким чином.
MySingletonObject.getInstance()
Об'єкт-супутник
Супутній об’єкт - це конкретний тип оголошення об’єкта, що дозволяє об’єкту діяти подібно до статичних об’єктів іншими мовами (наприклад, Java). Додавання companion
до оголошення об’єкта дозволяє додати „статичну” функціональність до об’єкта, навіть якщо фактична статична концепція не існує в Kotlin. Ось приклад класу з методами екземпляра та методами супутника.
class MyClass {
companion object MyCompanionObject {
fun actsAsStatic() {
}
}
fun instanceMethod() {
}
}
Виклик методу екземпляра буде виглядати так.
var myClass = MyClass()
myClass.instanceMethod()
Виклик методу супутнього об'єкта буде виглядати так.
MyClass.actsAsStatic()
Для отримання додаткової інформації див. Документи Kotlin .
object
для одиночних іcompanion object
для статичних методів. Kotlin - Декларації об’єктів дають хороші пояснення щодо використання.