Освой Kotlin играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Классы в 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()