1。属性委托:可以直接实现Kotlin提供的两个接口ReadWriteProperty
和ReadOnlyProperty
来分别实现var和val属性的委托
例子:
class Preference<T>(private val key: String, private val defaultValue: T) : ReadWriteProperty<Any?, T> {
override fun getValue(thisRef: Any?, property: KProperty<*>): T = findPreference(key, defaultValue) override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) = putPreference(key, value)
}
Preference 实现了ReadWriteProperty。
object Account { var userName by Preference(Constant.USER_NAME, "") }
声明属性时使用by Preference,(Account也可以是class),这样对username进行get时就会走getValue方法从sharepreference中获取(也可以定义缓存等等,无非就是getvalue上做文章啦),调用setvalue就会走sharepreference put方法自动存储。
实际效果就相当于重写属性的set get。这样的好处就是给这种相同行为的属性一个公共的入口,不必每个属性都写一遍set get