В Kotlin нет ключевого слова static. Вместо этого companion objects предоставляют похожую функциональность. Companion object объявляется внутри класса с помощью блока companion object, и его члены доступны напрямую через имя класса.
class MyClass {
companion object {
fun create(): MyClass = MyClass()
}
}
val instance = MyClass.create()
В отличие от static-членов Java, Kotlin companion objects — это настоящие экземпляры объектов, что даёт им значительно больше гибкости:
По умолчанию члены companion object — это не настоящие статические члены на уровне JVM. Чтобы они были видны как настоящие Java-статические методы, аннотируй их @JvmStatic:
companion object {
@JvmStatic
fun create(): MyClass = MyClass()
}
Это обеспечивает нормальную совместимость при вызове Kotlin-кода из Java.
| Возможность | Java static | Kotlin Companion Object |
|---|---|---|
| Настоящий экземпляр объекта | Нет | Да |
| Реализует интерфейсы | Нет | Да |
@JvmStatic нужен для совместимости с Java | Нет | Да |
Companion objects дают тебе удобство статического доступа, при этом сохраняя всю мощь объектно-ориентированного проектирования.
Companion objects в Kotlin — это реальные экземпляры объектов, которые могут реализовывать интерфейсы и передаваться как значения в функции, в отличие от статических членов Java.
Новый — ещё не проверен сообществом
Вы