Існує два різних типи 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 - Декларації об’єктів дають хороші пояснення щодо використання.