当前位置:网站首页>Kotlin委托属性知识点
Kotlin委托属性知识点
2022-08-08 20:26:00 【不忘初衷z】
Kotlin委托属性关键字 By lazy
By是委托属性关关键字,代码如下:
class user {
var name :String by Delegate()
}
这个就是将name委托给Delegate(),现在创建一个Delegate类
class Delegate{
里面会创建两个方法
setValue () {
}
和 getValue(){
} 方法 编译器会让你自动生成到
}
使用方法就是
fun main() { val user = User()
user.name = “张三”
println(user.name)
}
打印结果如下 : 张三
by lazy 惰加载属性
惰加载属性类型于延迟初始化属性类似,只有第一次访问到时候才能进行初始化操作,惰加载属性申请使用lazy函数申请委托属性,而延迟初始化属性使用lateinit关键字。两者有一定区别
惰加载属性必须是val 属性
lateinit属性必须是var 属性
使用代码如下
val user : String by lazy {
println(这个方法只执行一次)
Hello
}
fun main(){
println (user)
println (user)
}
打印结果如下
这个方法只执行一次
上面赋值只执行一次
上面赋值只执行一次
看到上述结果得到结论就是上述第一行代码只执行一次,注意后面花括号里面跟的方法可以是lambda表达式
现
可观察属性
var name:String by XXX.observable(“无”) { porp,oldValue,newValue - >
println("$oldValue 0> $newValue")
}
fun main(){
name = "张三“
name =“张四”
}
打印结果如下:
无 -> 张三
张三 -> 张四
结论: 从打印结果就能很清楚的看到,其实这个方法可以观察到属性到更改流程,就想是android中到JetPack中到ViewModel 一样,能很简单到实现UI界面到更新
还有一个方法就是vetoable 能够拦截一个赋值过程并且否决它。
把属性储存在映射中
常用到映射map里存储属性的值。这个经常用在json或者其他动态到应用中,这种情况可以实现映射实例自身作为委托来实现委托属性
class User(val map: Map<String,Ant?>) {
val name : String by map
val age : Int by map 如果取消委托age 就会出错
}
用法:
val user =User(mapOf(“name” to “张三”,“age” to 20))
边栏推荐
猜你喜欢
IJCAI 2022 | Can Graph Neural Networks Detect Anomalies?
学习笔记:第二部分 队列
LeetCode_2_两数相加
Experience Sharing | A low-cost and fast-paced approach to building an enterprise knowledge management system
NAACL2022 NER SOTA - RICON study notes
学习与尝试 --> 事件风暴
什么是仿射函数?
接口测试经典面试题:Session、cookie、token有什么区别?
“12306” 的架构到底有多牛逼?
学习笔记:2.3 静态链表 循环链表 双向链表
随机推荐
内网渗透之代理转发
What are the latest developments in the handling of false information?KDD2022 "Fighting Misinformation and Responding to Media Bias" tutorial, 161 pages ppt
阿里云OSS文件下载到本地指定文件有坑
iMeta | 深圳先进院戴磊组开发可同时提取共存菌株的组成和基因成分谱的菌株分析工具...
JSP第二篇 -----JSP浅聊EL表达式第二篇:EL表达式中的运算符
From interview to autism, five rounds of interviews for byte software testing post, four hours of soul torture...
分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03
OneNote 教程,如何在 OneNote 中检查拼写?
【分享】如何在集简云平台自己进行应用开发?
实践篇1:深度学习之----LetNet之tensorflow2的实现
Yarn 总结(未完待续)
头脑风暴:打家劫舍2
nacos作用
树查找(暑假每日一题 18)
JSD-2204-Session-Token-JWT-Day12
信号与系统【x(t)*h(t)=y(t) 求h(t)】附matlab代码
技术分享活动
Superman is coming!Flutter realizes full-screen power animation!
图的几种存储方式
Matlab用回归、SEIRD模型、聚类预测美国总统大选、新冠疫情对中美经济的影响