老师看看,这样实现SharedPreferences的代理,对吗???
来源:7-5 案例:使用属性代理读写 Properties

An3224978
2024-07-30
class SharedPreDelegates(private val name: String,
private val defaultValue: T,
private val sharedPreferences: SharedPreferences){
operator fun getValue(thisRef: Any?,property: KProperty<>):T{
return when (defaultValue){
is Boolean -> sharedPreferences.getBoolean(name,defaultValue) as T
is Float -> sharedPreferences.getFloat(name,defaultValue) as T
is Int -> sharedPreferences.getInt(name,defaultValue) as T
is Long -> sharedPreferences.getLong(name,defaultValue) as T
is String -> sharedPreferences.getString(name,defaultValue) as T
else -> throw IllegalArgumentException(“This type cannot be save”)
}
}
operator fun setValue(thisRef: Any?,property: KProperty<>,i: T){
with(sharedPreferences.edit()){
when(i){
is Boolean -> putBoolean(name,i)
is Float -> putFloat(name,i)
is Int -> putInt(name,i)
is Long -> putLong(name,i)
is String -> putString(name,i)
else -> throw IllegalArgumentException("")
}.apply()
}
}
}
abstract class AbsSharePreferences(context: Context){
private val shred: SharedPreferences =context.getSharedPreferences("MyPreferences",Context.MODE_PRIVATE)
protected fun <T> delegate(name: String,defaultValue: T):SharedPreDelegates<T>{
return SharedPreDelegates<T> (name,defaultValue,shred)
}
}
class SetShareP(context: Context):AbsSharePreferences(context){
var userName by delegate(“userName”,"")
var isLoggedIn by delegate(“isLoggenIn”,false)
var userAge by delegate(“passWord”,0)
}
2回答
-
An3224978
提问者
2024-07-30
为什么我贴上来的代码,缩进都没了
10 -
bennyhuo
2024-07-30
差不多就是这个意思00
相似问题