kotlin委托属性
fun main(arg: Array<String>) {
val myClass1 = myClass1()
myClass1.name="mycalsss1" val myClass2 = myClass2()
myClass2.name="myclass2"
println(myClass1.name)
println(myClass2.name)
}
class myClass1{
var name:String =""
get() :String{
println("mycalsss1.get 被调用")
return field
}
set(value:String) {
println("myclass1.set 被调用")
field=value
}
}
class myClass2{
var name:String =""
get() :String{
println("mycalsss2.get 被调用")
return field
}
set(value:String) {
println("myclass2.set 被调用")
field=value
}
}
输出:
myclass1.set 被调用
myclass2.set 被调用
mycalsss1.get 被调用
mycalsss1
mycalsss2.get 被调用
myclass2
上面代码冗余,所谓委托类,就是一个包含getValue和setValue函数的类,这两个函数operator声明
在使用委托类时,需要by关键字,创建委托类实例的代码放在by后面
如下
import kotlin.reflect.KProperty fun main(arg: Array<String>) {
val myClass1 = myClass1()
myClass1.name = "mycalss1" val myClass2 = myClass2()
myClass2.name = "myclass2"
println(myClass1.name)
println(myClass2.name)
} class delegate {
var name: String = ""
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
val classname = thisRef.toString().substringBefore("@")
println("$classname get被调用")
return name
} operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
val classname = thisRef.toString().substringBefore("@")
println("$classname set被调用")
name = value
}
} class myClass1 {
var name: String by delegate() } class myClass2 { var name: String by delegate()
}
输出结果和上面一样!
kotlin委托属性的更多相关文章
- ViewBinding 与 Kotlin 委托双剑合璧
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭 ...
- Kotlin的属性委托:无上下文情况下Android的赋值(KAD 15)
作者:Antonio Leiva 时间:Mar 9, 2017 原文链接:https://antonioleiva.com/property-delegation-kotlin/ 如我们在前面文章中读 ...
- kotlin 委托
委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理. Kotlin 直接支持委托模式,更加优雅,简洁.Kotlin 通过关键 ...
- Kotlin 委托(1)类委托、变量委托注意事项
1.官方文档 英文: https://kotlinlang.org/docs/reference/delegation.html https://kotlinlang.org/docs/referen ...
- Kotlin代理属性--官方文档翻译
代理属性 Delegated Properties 本文为个人翻译的Kotlin官方文档, 原文连接: Delegated Properties 一些特定的常见类型的属性, 尽管我们可以在每次需要的时 ...
- Kotlin 委托(2)变量委托是什么、自定义变量委托
1.委托是什么? 1.1 官网示例 在每个变量委托的实现的背后,Kotlin 编译器都会生成辅助对象并委托给它. 假设委托如下, class C { var prop: Type by MyDeleg ...
- python cookbook第三版学习笔记十七:委托属性
我们想在访问实例的属性时能够将其委托到一个内部持有的对象上,这经常用到代理机制上 class A: def spam(self,x): print("class_A: ...
- kotlin 委托类的初始化函数
import java.beans.AppletInitializer import kotlin.reflect.KProperty fun main(arg: Array<String> ...
- Android kotlin静态属性、静态方法
只需要用 companion object 包裹相应代码块即可.以静态属性为例: class Constants { companion object { val BASE_URL = "h ...
随机推荐
- Computer Vision_33_SIFT:Distinctive Image Features from Scale-Invariant Keypoints——2004
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- [Selenium2+python2.7][Scrap]爬虫和selenium方式下拉滚动条获取简书作者目录并且生成Markdown格式目录
预计阅读时间: 15分钟 环境: win7 + Selenium2.53.6+python2.7 +Firefox 45.2 (具体配置参考 http://www.cnblogs.com/yoyok ...
- WdatePicker日期控件使用与值获取,以及选择日期完毕触发事件
踩过无数坑,调试了很长时间,写出适合自己需求的方法需求:没有查询按钮,要求选择日期后自动触发查询事件(只有日期选择完成后才触发), 解决方案:代码如下:检索开始时间: <input type=& ...
- .netFramework中新增的功能—.net最新信息—.net的发展
关键字:.NET Framework 中的新增功能 链接地址:https://docs.microsoft.com/zh-cn/dotnet/framework/whats-new/index 链接地 ...
- webpack解决单页面路由问题
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- ArcGIS10.6 通过ArcMap发布二维数据服务。
ArcGIS版本基本每年都会更新,原来一直用10.2,在ArcMap中发布服务: 最近安装10.6整套系统,发现在ArcMap中输入http:id:6080/arcgis 输入用户名,密码 无法登录 ...
- K3CLOUD 常用数据表
二.K3 Cloud 开发插件<K3 Cloud 常用数据表整理>一.数据库查询常用表 按 Ctrl+C 复制代码 按 Ctrl+C 复制代码 通过表T_META_OBJECTTYPE的F ...
- 4、获取Class中的构造函数
4.获取Class中的构造函数 4.1 早期创建对象 早期创建对象,先根据被new的类的名称找寻该类的字节码文件,并加载进内存,并创建该字节码文件对象,并接着创建该接文件的对应的Person对象 co ...
- 【leetcode】1240. Tiling a Rectangle with the Fewest Squares
题目如下: Given a rectangle of size n x m, find the minimum number of integer-sided squares that tile th ...
- 关于IE8的兼容性问题
DOCTYPE 首先需要确保你的HTML页面开始部分要有DOCTYPE声明.DOCTYPE告诉浏览器使用什么样的HTML或XHTML规范来解析HTML文档,具体会影响: 对标记.attributes ...