Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktOpDlID 105 of 123 menu
◀ ▶

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

Делегирование интерфейса позволяет не писать тело каждого метода интерфейса: класс объявляет : SomeInterface by delegate, и все нереализованные методы интерфейса автоматически вызывают одноимённые методы объекта delegate. Класс подключает готовую реализацию, а делегат остаётся отдельным объектом.

Сначала описывают интерфейс и класс с реализацией, затем - класс-обёртку с делегированием:

interface Printer { fun printLine(text: String) } class ConsolePrinter : Printer { override fun printLine(text: String) { println(text) } } class Logger(b: Printer) : Printer by b fun main() { val logger = Logger(ConsolePrinter()) logger.printLine("ready") }

Параметр конструктора b должен реализовывать тот же интерфейс. Можно передать другую реализацию без изменения Logger:

class QuietPrinter : Printer { override fun printLine(text: String) { // no output } } fun main() { val logger = Logger(QuietPrinter()) logger.printLine("hidden") }

Несколько интерфейсов делегируют разным объектам в одном заголовке класса - каждый блок by связан со своим параметром конструктора.

Объявите интерфейс Greeter с методом greet(name: String): String. Реализуйте его в SimpleGreeter - строка "hi, " и имя. Объявите class Welcome(g: Greeter) : Greeter by g. Выведите результат Welcome(SimpleGreeter()).greet("Ann").

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить