当前位置: 首页 > news >正文

天津品牌网站制作微信小商店开通

天津品牌网站制作,微信小商店开通,WordPress如何恢复最初,wordpress 佛系汉化组委托 委托 代理 方法内的成员永远拿不到thisRef#xff1a;官方委托和自定义委托-》方法里面没办法使用反射 委托只能类委托和属性委托 Kotlin委托 本文链接#xff1a;https://blog.csdn.net/feather_wch/article/details/132095759 类委托 1、类委托 委托的是接口的方…委托 委托 代理 方法内的成员永远拿不到thisRef官方委托和自定义委托-》方法里面没办法使用反射 委托只能类委托和属性委托 Kotlin委托 本文链接https://blog.csdn.net/feather_wch/article/details/132095759 类委托 1、类委托 委托的是接口的方法 // 只能用于接口 interface DB{fun save() } // 类CreateDBAction实现了接口DB参数db是DB类型类的实现委托给参数db。 // 目的啥也不想干 class CreateDBAction(db: DB):DB by db 2、类委托的原理是什么生成了什么代码 成员变量$$delegate_0 参数db实现方法委托给$$delegate_0调用save() public final class CreateDBAction implements DB {// $FF: synthetic fieldprivate final DB $$delegate_0;public CreateDBAction(NotNull DB db) {Intrinsics.checkNotNullParameter(db, db);super();this.$$delegate_0 db;}public void save() {this.$$delegate_0.save();} }3、类委托有什么用 减少委托的代码Compose是重委托 CreateDBAction(SqlDB()).save() CreateDBAction(OracleDB()).save()属性委托 1、属性委托委托的是 属性的 set和get class MyKt{var value 1314var number by ::value // 两个属性公用get和set } // number - getNumber() - getValue() // number 10 - setNumber(10) - setValue(10)2、委托属性有什么用 字段升级老字段适配老用户新字段用于新用户。共用一个get、set class Database{var data 941226 // 1.0var newData by ::data // 2.0 }3、懒加载委托也就是属性委托 第一次获取时才会获取下面例子第一次获取耗时2秒其他都立马获得 fun requestDownload(): String{Thread.sleep(2000L)return sucess }// 懒加载 // 属性委托委托给 val responseData : String by lazy {requestDownload() } // val responseData : String SynchronizedLazyImpl(requestDownload()) // 借助了SynchronizedLazyImpl的get方法fun main(){println(startloading...)println(responseData)println(responseData)println(responseData) }自定义属性委托 1、完全自己实现属性委托 // 自定义委托定义好get和set之后属性可以用该类实现属性委托 class Custom{operator fun getValue(owner: Owner, property: KProperty*) : String{return AAA}operator fun setValue(owner: Owner, property: KProperty*, value :String){} } class Owner{val responseData : String by Custom() }2、利用模板实现属性委托:ReadWriteProperty // 自定义委托 class Custom2 : ReadWritePropertyOwner, String{var str defaultoverride fun getValue(thisRef: Owner, property: KProperty*): String {return str}override fun setValue(thisRef: Owner, property: KProperty*, value: String) {str value} }提供委托/暴露者委托 1、provideDelegate 额外的属性初始化逻辑在属性被委托对象初始化之前进行一些额外的操作例如数据验证、计算或日志记录等。针对不同属性的不同行为通过在不同的委托对象的provideDelegate方法中实现不同的逻辑可以根据属性的不同需求为每个属性提供不同的行为。属性访问的可扩展性可以为属性访问添加自定义的行为例如缓存、延迟加载、权限控制等。 class Owner{val responseData : String by Custom() } // 自定义委托 class Custom(var str: String Default) : ReadWritePropertyOwner, String{override fun getValue(thisRef: Owner, property: KProperty*): String {return str}override fun setValue(thisRef: Owner, property: KProperty*, value: String) {str value} } // provideDelegate,暴露者委托 选择器 class SmartDelegator{operator fun provideDelegate(thisRef:Owner, property: KProperty*):ReadWritePropertyOwner, String{return if(property.name.isEmpty()){Custom(empty)}else{Custom(normal)}} }实战场景 自己实现by lazy class LazyInitDelegateT {private var initializer: (() - T)? nulloperator fun getValue(thisRef: Any?, property: KProperty*): T {return initializer?.invoke() ?: throw IllegalStateException(Property not initialized)}operator fun setValue(thisRef: Any?, property: KProperty*, value: (() - T)) {initializer value} }class Example {val lazyProperty: String by LazyInitDelegate {// 在第一次访问属性时执行初始化逻辑println(Initializing lazy property)Lazy Initialized} }fun main() {val example Example()println(example.lazyProperty) // 输出Initializing lazy property \n Lazy Initialized } 属性委托的日志记录 import kotlin.reflect.KMutableProperty import kotlin.reflect.KPropertyclass LoggingDelegateT {operator fun getValue(thisRef: Any?, property: KProperty*): T {val value property.getter.call()println(Property ${property.name} is accessed, value: $value)return value as T}operator fun setValue(thisRef: Any?, property: KProperty*, value: T) {println(Property ${property.name} is set with value: $value)(property as KMutableProperty).setter.call(thisRef, value)} }class Example {var property: String by LoggingDelegate() }fun main() {val example Example()example.property New value // 输出Property property is set with value: New valueprintln(example.property) // 输出Property property is accessed, value: New value \n New value } viewmodel 1、如何做到属性内部可以修改外部不可以修改 class Data{var data:String private setprivate void changeData(value:String){data value} } val data Data() data.data // xxx 不可以 println(data.data) // 可以2、如何做到kotlin的list集合对内可以修改对外界不可以修改 class MyKt{// 内部可以修改private val _data : MutableListString mutableListOf()// 外部不可以修改val data : ListString by :: _data }3、使用::用官方自定义委托不使用需要自定义委托 4、用委托实现ViewModel的自动构造 class MyViewModel : ViewModel() {}fun main() {// 委托实现val mainViewModel : MyViewModel by viewModels() }private fun MainActivity.viewModels() : ReadOnlyPropertyMainActivity?, MyViewModel object : ReadOnlyPropertyMainActivity?, MyViewModel{override fun getValue(thisRef: MainActivity?, property: KProperty*): MyViewModel {// thisRef永远为nullreturn ViewModelProvider(thisviewModels).get(MyViewModel::class.java)}}委托TextView类似DataBinding // operator fun TextView.provideDelegate(value: Any?, property: KProperty*) object: ReadWritePropertyAny?, String?{override fun getValue(thisRef: Any?, property: KProperty*): String? {return text as String}override fun setValue(thisRef: Any?, property: KProperty*, value: String?) {text value}}// 创建TextView控件双向绑定 var textView : TextView findViewById(R.id.tv) var message:String ? by textViewtextView.text 更改了控件的text - message中的数值也会变message 更改了数据 - 更新UI 双向绑定多个控件操作数据 var data1 : String by textView1 var data2 : String by textView2 var data3 : String by textView3data3 data2 data2 data1 data1 我在吃饭哦 // 操作数据View就会变不用管UI刷新数据出题目如何手动实现String的代理局部变量(用扩展函数) var s1 wch var s2 : String by ::s1 // 类的成员变量才可以 var s3 : String by s1 // 不用官方的::fun main() {var s1 wchvar s2:String by s1 // 报错 }// Kotlin反射机制 operator fun String.setValue(item: Any?, property: KProperty*, value:String){// import kotlin.reflect.jvm.javaField, 已经被移除// property.javaField?.isAccessible true// property.javaField?.set(item, value) } operator fun String.getValue(item: Any?, property: KProperty*) this
http://www.hkea.cn/news/14285182/

相关文章:

  • 百度教育网站四川住房城乡建设部网站
  • 高中做信息技术题网站河北省石家庄市官网
  • 必须网站的访问量东莞保安招聘网
  • 网站建设开发外包公司打码网站怎么做
  • 网站推广效果的评价网站如何改版
  • 网站当前链接融资网站开发
  • 建站之星管理中心怎么做网站广告代理商
  • 潍坊潍微贷是哪家网站建设的wordpress 缓慢
  • 网页设计与网站建设文档网站建设方案及
  • 制作单页网站要网址辽宁省电力建设网站
  • 济南建网站工作室中国站长网入口
  • 菏泽网站制建设哪家好如何制作微信小程序教程
  • 怎么做国内网站设计logo图案用什么软件
  • 静态网站设计与制作书籍响应式企业网站建设
  • 极路由 做网站短视频推广代理
  • 飞沐网站建设公司北京网站建设电影
  • wordpress主题外贸网站平面设计专业学什么
  • 网站友情链接与排名网站从建设到上线流程
  • 网站怎么做才能赚钱吗wordpress地址应该填什么意思
  • 个人网站免备案推广软文
  • 石家庄网站建设外包公司排名手机优化大师下载2022
  • 同时优化几个网站做网站得每年续费吗
  • 南沙建设局网站培训网站html
  • 企业网站报价正规营销型网站建设
  • 织梦建站模板开门红营销活动方案
  • 网站开发 超速云wordpress googlevis 嵌入
  • 做农宿的网站新的营销模式有哪些
  • 网站域名跳转代码有云服务器怎么做网站
  • 龙岗网站建设icxun玉田网站制作
  • 免费建设小说网站四川省建筑人才网