当前位置:网站首页>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))
边栏推荐
猜你喜欢
0-1 背包问题
Experience Sharing | A low-cost and fast-paced approach to building an enterprise knowledge management system
学习笔记:栈的应用1_递归(重点)
NAACL2022 NER SOTA—RICON学习笔记
知乎高赞:如果一个程序员工作5年后还没成为大牛,是不是该考虑别的路子了?
Ansible自动化运维工具(二)playbook剧本
iMeta | 深圳先进院戴磊组开发可同时提取共存菌株的组成和基因成分谱的菌株分析工具...
基于opencv的图片人像移除
What are the latest developments in the handling of false information?KDD2022 "Fighting Misinformation and Responding to Media Bias" tutorial, 161 pages ppt
我们为什么要远离Service Mesh
随机推荐
黑猫带你学Makefile第7篇:Makefile简单例程一览
头脑风暴:打家劫舍2
有幸与美团大佬共同探讨单节点连接数超1.5W的问题
自然堂品牌焕新升级,携手代言人王一博彰显美妆年轻新态度
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
SushiSwap「SUSHI」下降了 93%,但还没有完全消失
NAACL2022 NER SOTA - RICON study notes
openEuler 资源利用率提升之道02:典型应用下的效果
一文教你普罗米修斯Prometheus的基础应用
【分享】如何在集简云平台自己进行应用开发?
LeetCode #104.二叉树的最大深度
差点被ECCV错过的论文:视频理解新框架,仅用微调的「成本」,达到预训练的「全能」...
解决执行Command报错fork/exec /xxx/yy: no such file or directory
LeetCode_67_二进制求和
我们仍未知道那天踩的MultipartFile file为null的大坑是为什么
头条二面:你确定ThreadLocal真的会造成内存泄露?
Experience Sharing | A low-cost and fast-paced approach to building an enterprise knowledge management system
文档管理系统对于企业来说有哪些作用?
暑期“小候鸟”超员增多 惠州交警提醒:安全出行不能忘
Maykel Studio OpenHarmony Device Development Training Notes - Chapter 6 Study Notes