老师看看,这样实现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

为什么我贴上来的代码,缩进都没了


1
0

bennyhuo

2024-07-30

差不多就是这个意思
0
0

学会Kotlin 突破开发语言瓶颈

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

1760 学习 · 481 问题

查看课程