委托的概念
委托是一种设计模式,它的基本概念是:操作对象自己不会去处理某段逻辑,而是会把工作委托给另外一个辅助对象去处理。
class NewList<out T>(private val list: MutableList<T>) {fun isEmpty() = list.isEmpty()fun add(item: @UnsafeVariance T) = list.add(item)fun remove(item: @UnsafeVariance T) = list.remove(item)fun myMethod() {// some logic}
}
我们在类NewList中定义了几个简单的方法,我们并没有让NewList自己去实现这些方法的逻辑。而是交给了其构造函数中的属性参数list去处理。
委托属性
委托属性的语法:
val/var <属性名>: <类型> by <表达式>
在by
关键字后面的表达式是该委托,属性对应的get()
或set()
会被委托给它的getValue()
或setValue()
方法。属性的委托不必实现任何的接口,但是需要提供getValue()
或setValue()
方法。
class Delegate {operator fun getVa