Шаг 180.
Основы Kotlin.
Объекты. Вспомогательные объекты

    На этом шаге мы рассмотрим назначение таких объектов.

    Если вы хотите связать инициализацию объекта с экземпляром класса, это можно организовать, определив вспомогательный объект. Вспомогательный объект объявляется внутри класса с помощью модификатора companion. У класса не может быть больше одного вспомогательного объекта.

    Инициализация вспомогательного объекта выполняется в двух случаях: при инициализации вмещающего класса, что делает его хорошим местом для хранения данных в единственном экземпляре, имеющих контекстную связь с объявлением класса, и при прямом обращении к одному из его свойств или функций.

    Так как фактически вспомогательный объект - это объявление объекта, вам не придется создавать экземпляр класса, чтобы использовать любые объявленные в нем функции или свойства. Давайте посмотрим на следующий пример вспомогательного объекта внутри класса с именем PremadeWorldMap:

class PremadeWorldMap 
    .    .    .
    companion object {
        private const val MAPS_FILEPATH = "nyethack.maps"
        fun load() = File(MAPS_FILEPATH).readBytes()
    }
}

    У PremadeWorldMap есть вспомогательный объект с единственной функцией load(). Если потребуется вызвать load() еще где-нибудь в коде, вы сможете сделать это без создания экземпляра PremadeWorldMap, как показано ниже:

  PremadeWorldMap.load()

    Содержимое файла будет загружено вспомогательным объектом только один раз, во время инициализации экземпляра PremadeWorldMap или при первом вызове функции load(). И неважно, сколько экземпляров PremadeWorldMap будет создано, потому что вспомогательный объект всегда существует в единственном экземпляре.

    Понимание целей и задач синглтонов, анонимных и вспомогательных объектов - это ключ к их эффективному использованию. А их эффективное использование позволит вам написать хорошо организованный и масштабируемый код.

    На следующем шаге мы рассмотрим вложенные классы.




Предыдущий шаг Содержание Следующий шаг