Delegation

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

В примере у нас есть один интерфейс «Base» с его абстрактным методом с именем «printme()». В классе BaseImpl мы реализуем эту «printme()», а позже из другого класса мы используем эту реализацию, используя ключевое слово «by».

Делегирование свойств

В предыдущем разделе мы узнали о шаблоне проектирования делегирования, используя ключевое слово «by». В этом разделе мы узнаем о делегировании свойств с использованием некоторых стандартных методов, упомянутых в библиотеке Kotlin.

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

Lazy()

Lazy — это лямбда-функция, которая принимает свойство в качестве входных данных и взамен возвращает экземпляр Lazy<T> , где <T> — это тип используемых свойств. Давайте посмотрим на следующий пример, чтобы понять, как это работает.

В приведенном выше фрагменте кода мы передаем переменную «myVar» в функцию Lazy, которая, в свою очередь, присваивает значение своему объекту и возвращает его основной функции.

Observable()

Observable() принимает два аргумента для инициализации объекта и возвращает их вызываемой функции. В следующем примере мы увидим, как использовать метод Observable() для реализации делегирования.

Выражение после ключевого слова «by» это делегирование. Методы get() и set() переменной p будут делегированы ее методам getValue() и setValue() , определенным в классе Delegate.

Для приведенного выше фрагмента кода ниже приведен класс делегата, который нам нужно сгенерировать, чтобы присвоить значение переменной p.

При чтении будет вызываться метод getValue(), а при установке переменной будет вызываться метод setValue().

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

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

6 + 20 =