委托
Kotlin官网:Classes and Objects-Delegation
类委托
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
关键字后的b声明主构造的b参数会在对象内部存储,编译器会为Derived生成Base的所有公开函数并调用b实现。
自己重写的函数优先级高于代理声明生成的函数。例如:
在Derived中添加override fun print() { print("abc") }
,显式地重写Base的print函数,再调用时打印的是”abc”。