SharedPreferences 属性代理

来源:7-5 案例:使用属性代理读写 Properties

wdmzjgxd

2020-09-28

class SharedPreferencesDelegate<T>(
    private val sharedPreferences: SharedPreferences,
    private val editor: SharedPreferences.Editor,
    private val default: T,
) {
    operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
        return with(sharedPreferences) {
            val result = when (default) {
                is Boolean -> getBoolean(property.name, default)
                is Int -> getInt(property.name, default)
                is Long -> getLong(property.name, default)
                is String -> getString(property.name, default)
                is Float -> getFloat(property.name, default)
                else -> throw IllegalArgumentException("error type of defaultValue")
            }
            result as T
        }
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        editor.apply {
            when (value) {
                is Boolean -> putBoolean(property.name, value)
                is Int -> putInt(property.name, value)
                is Long -> putLong(property.name, value)
                is String -> putString(property.name, value)
                is Float -> putFloat(property.name, value)
                else -> throw IllegalArgumentException("error type of value")
            }.apply()
        }
    }
}
abstract class AbsSp {
    private val sharedPreferences by lazy {
        MyApplication.instance!!.applicationContext.getSharedPreferences(this::class.simpleName!!, Context.MODE_PRIVATE)
    }

    private val editor by lazy {
        sharedPreferences.edit()
    }

    fun <T> default(default: T): SharedPreferencesDelegate<T> {
        return SharedPreferencesDelegate(sharedPreferences, editor, default)
    }
}
object DefaultSp : AbsSp()
object GlobalSp : AbsSp()

我自己尝试实现了一下,想看下老师写的,没找到在哪里

写回答

1回答

bennyhuo

2020-09-28

可以在课程源码的android工程里面找找,如果没有,后面我加一下

0
2
bennyhuo
回复
矩阵中的比特
课程有git仓库,同学在课程主页找一下哈
2024-09-01
共2条回复

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1760 学习 · 481 问题

查看课程