成为委派属性的条件

对于只读属性(val),委派属性需要提供一个函数名叫getValue,并包含以下参数:

  • thisRef --必须与属性类型一致或是其超类

  • property --必须是KProperty<*>或它的超类

这个方法必须返回与属性一致的类型或其子类型。

对于可变属性(var),委派属性需要提供一个额外的方法setValue,并包含以下参数:

  • thisRef -- 与getValue一致
  • property -- 与getValue一致
  • new value -- 必须与属性类型一致或它的超类

getValue()setValue()方法可能提供委派类的成员函数或扩展函数。当你需要委派对象属性,但是属性并没有提供相关函数时,扩展函数是很方便的。getValue()setValue()方法都需要使用operator关键字标记。

委派类可以实现以下接口ReadOnlyPropertyReadWriteProperty

interface ReadOnlyProperty<in R, out T> {
    operator fun getValue(thisRef: R, property: KProperty<*>): T
}
interface ReadWriteProperty<in R, T> {
    operator fun getValue(thisRef: R, property: KProperty<*>): T
    operator fun setValue(thisRef: R, property: KProperty<*>, value: T)
}

results matching ""

    No results matching ""