Extensions (расширения)

Extensions Kotlin предоставляют возможность расширять класс новыми функциями без реализации концепции наследования классом или использования шаблона проектирования, такого как Decorator. Эти расширения в основном добавляют некоторую функциональность в существующий класс, не расширяя класс.

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

Точно так же мы можем определить свойства Extensions для существующего класса Kotlin.

Расширение функций

Расширение функций kotlin — это функция-член класса, которая определена вне класса. Созданные функции расширения используются как обычные функции внутри этого класса.

Ниже приведен синтаксис для определения расширения функций . Здесь расширение функций объявляется с использованием имени класса, а также с использованием имени метода.

Расширение функций Kotlin позволяет определять метод вне основного класса. В следующем примере мы увидим, как расширение реализовано на функциональном уровне.

В приведенном выше примере у нас нет никакого метода внутри класса «Alien» с именем «addMySkills()», однако мы по-прежнему реализуем тот же метод где-то еще за пределами класса. Это магия расширения.

Расширение классов библиотек

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

Расширение companion object

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

В следующем примере мы создадим «companion object».

Приведенный выше пример выглядит как static в Java, однако в реальности мы создаем объект как переменную-член того же класса. Вот почему он также включен в свойство расширения и может быть альтернативно назван расширением объекта. Вы в основном расширяете объект того же класса, чтобы использовать некоторые функции-члены.

Расширение с Nullable Receiver

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

Чтобы определить расширение с Nullable Receiver, нам нужно добавить проверку с Nullable Receiver (нулевого приемника) внутри функции расширения, и будет возвращено соответствующее значение.

Расширение свойств

Kotlin позволяет расширять свойства, это очень похоже на то, как мы расширяли функции. Расширение свойств также происходит вне класса. Поскольку расширения фактически не вставляют элементы в классы, нет эффективного способа иметь резервное поле. Вот почему инициализаторы не разрешены для расширения свойств.

Мы можем добавить геттер и сеттер вместе со свойством, которые являются не чем иным, как функциями расширения.

Поделись с друзьями:
Если вам понравилась статья, подписывайтесь на наши социальные сети.

Оставьте комментарий

семнадцать − пять =