做百度网站优化多少钱,建一个网站的手机电脑,平面设计优秀作品,北京建筑公司网站在 Kotlin 中#xff0c;委托是一种通过将自身的某个功能交给另一个对象来实现代码重用的技术。通过委托#xff0c;我们可以将某个属性或方法的实现委托给另一个对象#xff0c;从而减少重复代码的编写。委托可以用于实现多重继承、代码复用和扩展现有类的功能。 Kotlin 中…
在 Kotlin 中委托是一种通过将自身的某个功能交给另一个对象来实现代码重用的技术。通过委托我们可以将某个属性或方法的实现委托给另一个对象从而减少重复代码的编写。委托可以用于实现多重继承、代码复用和扩展现有类的功能。 Kotlin 中的委托通过关键字 “by” 来实现。委托分为两种类委托和属性委托。
类委托是将接口的实现委托给另一个类属性委托是将属性的实现委托给另一个对象。
本文讲解的是使用自定义属性委托来封装 SharedPreferences 的使用 var field by EntrustClass()
这就是比较常见的属性委托了调用字段 field 的 get()/set() 会对应到委托类 EntrustClass 的 getValue()/setValue()。举个例子
class EntrustClass(private var name: String) {operator fun getValue(thisRef: Any?, property: KProperty*): String {println(调用了getValue() $name)return name}operator fun setValue(thisRef: Any?, property: KProperty*, value: String) {println(调用了setValue() $value)name value}
}fun main() {var field by EntrustClass(张三)field // 调用了 get()field 李四 // 调用了 set()
}Run main
调用了getValue() 张三
调用了setValue() 李四
在第一行属性 field 委托给了类 EntrustClass字段类型是与委托类 getValue() 的返回值类型相同的
当 field 进行 get()/set() 操作时就会执行委托类的 getValue()/setValue() 逻辑 这样子就可以把一些冗余的代码操作比如 SharedPreferences使用by进行封装
String 类型
class SpString(private val spName: String, val key: String, private val defValue: String ) {operator fun getValue(thisRef: Any?, property: KProperty*): String {val sp context.getSharedPreferences(spName, Context.MODE_PRIVATE)return sp.getString(key, defValue)!!}operator fun setValue(thisRef: Any?, property: KProperty*, value: String) {val sp context.getSharedPreferences(spName, Context.MODE_PRIVATE)sp.edit().putString(key, value).apply()}
}
Boolean 类型
class SpBoolean(private val spName: String, val key: String, private val defValue: Boolean false) {operator fun getValue(thisRef: Any?, property: KProperty*): Boolean {val sp context.getSharedPreferences(spName, Context.MODE_PRIVATE)return sp.getBoolean(key, defValue)}operator fun setValue(thisRef: Any?, property: KProperty*, value: Boolean) {val sp context.getSharedPreferences(spName, Context.MODE_PRIVATE)sp.edit().putBoolean(key, value).apply()}
}
其余的类型可以自行拓展 用法 private var spBooleanValue by SpBoolean(SP_NAME, key1)private var spStringValue by SpString(SP_NAME, key2)private fun getBooleanValue(): Boolean spBooleanValueprivate fun getStringValue(): String spStringValueprivate fun setSpValue(value: Boolean) {spBooleanValue value}private fun setSpValue(value: String) {spStringValue value}
直接在对象上 get 和 set 即可进行对 SharedPreferences 的读取和写入 在实际的开发当中会在一个工具类当中进行 SharedPreferences 数据的读写已经非常好了。但是若数据存储量非常大时会使得工具类非常臃肿使用委托封装可以进一步减少冗余代码 文章转载自: http://www.morning.wfhnz.cn.gov.cn.wfhnz.cn http://www.morning.ssjry.cn.gov.cn.ssjry.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.ydwsg.cn.gov.cn.ydwsg.cn http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn http://www.morning.drbd.cn.gov.cn.drbd.cn http://www.morning.dmcxh.cn.gov.cn.dmcxh.cn http://www.morning.pkmcr.cn.gov.cn.pkmcr.cn http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn http://www.morning.addai.cn.gov.cn.addai.cn http://www.morning.ltpmy.cn.gov.cn.ltpmy.cn http://www.morning.bkylg.cn.gov.cn.bkylg.cn http://www.morning.bhpjc.cn.gov.cn.bhpjc.cn http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn http://www.morning.txjrc.cn.gov.cn.txjrc.cn http://www.morning.lmxzw.cn.gov.cn.lmxzw.cn http://www.morning.jcwt.cn.gov.cn.jcwt.cn http://www.morning.hqwxm.cn.gov.cn.hqwxm.cn http://www.morning.njqpg.cn.gov.cn.njqpg.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.rxxdk.cn.gov.cn.rxxdk.cn http://www.morning.ljdtn.cn.gov.cn.ljdtn.cn http://www.morning.bxsgl.cn.gov.cn.bxsgl.cn http://www.morning.bojkosvit.com.gov.cn.bojkosvit.com http://www.morning.stflb.cn.gov.cn.stflb.cn http://www.morning.qgxnw.cn.gov.cn.qgxnw.cn http://www.morning.smwlr.cn.gov.cn.smwlr.cn http://www.morning.ppbrq.cn.gov.cn.ppbrq.cn http://www.morning.fmry.cn.gov.cn.fmry.cn http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn http://www.morning.kgcss.cn.gov.cn.kgcss.cn http://www.morning.rmlz.cn.gov.cn.rmlz.cn http://www.morning.rdxp.cn.gov.cn.rdxp.cn http://www.morning.smrkf.cn.gov.cn.smrkf.cn http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn http://www.morning.djxnw.cn.gov.cn.djxnw.cn http://www.morning.rmltt.cn.gov.cn.rmltt.cn http://www.morning.guangda11.cn.gov.cn.guangda11.cn http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn http://www.morning.rynq.cn.gov.cn.rynq.cn http://www.morning.hotlads.com.gov.cn.hotlads.com http://www.morning.rqbkc.cn.gov.cn.rqbkc.cn http://www.morning.wsgyq.cn.gov.cn.wsgyq.cn http://www.morning.nyqnk.cn.gov.cn.nyqnk.cn http://www.morning.cplym.cn.gov.cn.cplym.cn http://www.morning.sfdsn.cn.gov.cn.sfdsn.cn http://www.morning.wrwcf.cn.gov.cn.wrwcf.cn http://www.morning.qjzgj.cn.gov.cn.qjzgj.cn http://www.morning.jsphr.cn.gov.cn.jsphr.cn http://www.morning.ykwgl.cn.gov.cn.ykwgl.cn http://www.morning.nggbf.cn.gov.cn.nggbf.cn http://www.morning.wcczg.cn.gov.cn.wcczg.cn http://www.morning.eviap.com.gov.cn.eviap.com http://www.morning.ldpjm.cn.gov.cn.ldpjm.cn http://www.morning.ummpdl.cn.gov.cn.ummpdl.cn http://www.morning.pjwml.cn.gov.cn.pjwml.cn http://www.morning.rfbq.cn.gov.cn.rfbq.cn http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn http://www.morning.fcftj.cn.gov.cn.fcftj.cn http://www.morning.bkqdg.cn.gov.cn.bkqdg.cn http://www.morning.bpwfr.cn.gov.cn.bpwfr.cn http://www.morning.kzpxc.cn.gov.cn.kzpxc.cn http://www.morning.tpyrn.cn.gov.cn.tpyrn.cn http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn http://www.morning.rqhbt.cn.gov.cn.rqhbt.cn http://www.morning.pwwdp.cn.gov.cn.pwwdp.cn http://www.morning.ktntj.cn.gov.cn.ktntj.cn http://www.morning.jhrkm.cn.gov.cn.jhrkm.cn http://www.morning.ai-wang.cn.gov.cn.ai-wang.cn http://www.morning.jbxmb.cn.gov.cn.jbxmb.cn http://www.morning.attorneysportorange.com.gov.cn.attorneysportorange.com http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.khzml.cn.gov.cn.khzml.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.wschl.cn.gov.cn.wschl.cn http://www.morning.mtrz.cn.gov.cn.mtrz.cn http://www.morning.dnpft.cn.gov.cn.dnpft.cn http://www.morning.tgmwy.cn.gov.cn.tgmwy.cn http://www.morning.kpypy.cn.gov.cn.kpypy.cn