Освой Kotlin играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

companion

Классы в Kotlin не могут иметь статических членов, ключевое слово static не входит в состав языка.

Можно пометить объект в классе ключевым словом companion вместе с другим ключевым словом object и обращаться к методам и свойствам объекта через имя содержащего его класса без явного указания имени объекта.


class Something{
	companion object {
		
		val age = 11
		
		fun bar() {
			println("Companion object called")
		}
	}
}

Something.bar() // Companion object called
println(Something.age)

Объект-компаньон имеет доступ ко всем членам класса и подходит для реализации шаблона "Фабрика".

Возвращаясь к примеру с val age, нужно заметить, что следует избегать такого кода. Лучше добавить к переменной const.


companion object {
    const val age = 11
}

Этот способ работает для примитивных типов и строк (Int, Double, String...).

Для объектов можно воспользоваться аннотацией @JvmField.


companion object {
    @JvmField val cat = Cat()
}

Можно дать идентификатор компаньону.


companion object MyObject { ...}

Something.MyObject.bar()
Реклама