Что подразумевается под «сопутствующим объектом»? До сих пор я использовал его только для замены Java, static
когда мне это нужно.
Я смущен с:
- Почему это называется «компаньон»?
- Значит ли это, что для создания нескольких статических свойств я должен сгруппировать их вместе внутри
companion object
блока? - Чтобы мгновенно создать одноэлементный экземпляр, относящийся к классу, я часто пишу
:
companion object {
val singleton by lazy { ... }
}
который выглядит как однотипный способ сделать это. Какой способ лучше?
источник
Этот объект является компаньоном экземпляров. Во IIRC была продолжительная дискуссия: предстоящие изменения-класс-объекты-переосмысление
Да. Каждое «статическое» свойство / метод должно быть размещено внутри этого компаньона.
Вы не создаете экземпляр Singleton мгновенно. Он создается при доступе
singleton
в первый раз.Скорее перейдите
object Singleton { }
к определению синглтон-класса. Смотрите: Объявления объектов Вам не нужно создавать экземплярSingleton
, просто используйте его такSingleton.doWork()
Просто помните, что Kotlin предлагает другие вещи для организации вашего кода. Теперь есть альтернативы простым статическим функциям, например, вы можете использовать функции верхнего уровня.
источник
Почему это называется «компаньон»?
Объявление объекта внутри класса может быть помечено ключевым словом companion:
Члены объекта-компаньона можно вызывать, используя просто имя класса в качестве квалификатора:
Если вы используете только «объект» без «компаньон», вы должны сделать так:
В моем понимании «компаньон» означает, что этот объект является компаньоном с внешним классом.
источник
Можно сказать, что компаньон такой же, как «Статический блок», как Java, но в случае с Kotlin нет концепции статического блока, чем компаньон входит в кадр.
Как определить сопутствующий блок:
Вызов метода сопутствующего блока, прямой с именем класса
источник