type | layout | category | title | url |
---|---|---|---|---|
doc |
reference |
Syntax |
Делегирование |
Шаблон делегирования является хорошей альтернативой наследованию, и Kotlin поддерживает его нативно, освобождая вас от необходимости написания шаблонного кода.
interface Base {
fun print()
}
class BaseImpl(val x: Int) : Base {
override fun print() { print(x) }
}
class Derived(b: Base) : Base by b
fun main(args: Array<String>) {
val b = BaseImpl(10)
Derived(b).print() // prints 10
}
Ключевое слово by
в оглавлении Derived
, находящееся после типа делегируемого класса, говорит о том, что объект b
типа Base
будет храниться внутри экземпляра Derived
, и компилятор сгенерирует у Derived
соответствующие методы из Base
, которые при вызове будут переданы объекту b