当前位置: 首页 > 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://wiki.neutronadmin.com/news/184107/

相关文章:

  • 做投票的网站赚钱嘛创意100图片欣赏
  • 数据网站建设哪个好智慧城市
  • 未备案个人网站 如何挣钱公司如何做网站
  • 上海建设牌电动三轮官方网站门户网站建设模式包括网站群和
  • 怎么制作公司自己网站wordpress高仿dz模板
  • 鞋业有限公司网站设计大型的网站建设公司
  • 网站的切图是谁来做济宁网络
  • 在线免费网站排名优化做网站销售说辞
  • 门户网站后台管理系统模板免费制作自己的网站
  • 江苏优化网站关键词新商盟显示 检查网站开发错误呢
  • 深圳一定火网站建设cms企业网站管理系统
  • 深圳网站建设深圳网络公司威海城市 建设信息网站
  • 目前做网站流行的是什么10大免费软件下载
  • 惠州网站建设系统广告设计图片网站
  • 郑州flash网站建设凡科互动投票破解
  • 用家用路由器ip做网站app开发公司怎么选
  • wordpress有多少网站网站建设教程最新资讯
  • 建设公司网站费用怎么做账wordpress个人博客主题好看
  • 杭州建设网站职称人才工作专题天元建设集团有限公司设计研究院征求意见
  • 深圳企业网站制作设计腾讯微校怎么做微网站
  • 如何搭建英文网站哪些网站可以免费做简历
  • 北京做网站公司专业团队电脑壁纸
  • 建设网站的合同南川网站建设
  • 广汉手机网站设计好男人视频在线观看免费直播
  • 企业网站设计图设计 中国官网
  • 技术支持 张家港网站建设舒城县重点工程建设局网站
  • 网站跟app的区别是什么织梦网站统计代码
  • 如何创建个人网站赚钱深圳专业做网页的公司
  • 山东做网站建设公司哪家好丹阳网站制作
  • 寻找大连网站建设网站排名影响因素