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 ...
随机推荐
- linux centos Supervisor守护.netcore进程安装配置
场景:当部署完.netcore程序后 使用dotnet xx.dll 后可以运行,但关闭shell或隔断时间会自动断开,此时部署的.netcore程序就不能访问了,此时需要用到Supervisor了 ...
- CentOS7安装CDH 第五章:CDH的安装和部署-CDH5.7.0
相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...
- ZZNU-oj-2141:2333--【O(N)求一个数字串能整除3的连续子串的个数,前缀和数组+对3取余组合数找规律】
2141: 2333 题目描述 “别人总说我瓜,其实我一点也不瓜,大多数时候我都机智的一批“ 宝儿姐考察你一道很简单的题目.给你一个数字串,你能判断有多少个连续子串能整除3吗? 输入 多实例输入,以E ...
- 大数据之路week03--day05(线程 II)
今天,咱们就把线程给完完全全的结束掉,但是不是说,就已经覆盖了全部的知识点,可以说是线程的常见的问题及所含知识基本都包含. 1.多线程(理解) (1)JDK5以后的针对线程的锁定操作和释放操作 Loc ...
- Css案例整理
1.实现两个div并排显示 案例:checkbox的标题和内容需要并排显示,checkbox竖向排列 <head> <style type="text/css"& ...
- Java锁--ReentrantLock
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496101.html ReentrantLock介绍 ReentrantLock是一个可重入的互斥锁,又 ...
- ln -s /usr/local/jdk1.8.0_201/bin/java /bin/java
ln -s /usr/local/jdk1.8.0_201/bin/java /bin/java
- WPF界面开发者注意啦!Scheduler控件支持时区功能了,你get了吗
DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...
- 钉钉中设置代码提交提醒--Github机器人(转)
生成GitHub机器人webhook 从PC端或者手机端的群机器人入口进入到机器人管理页面,选择“GitHub机器人”,按照设置流程生成GitHub机器人,即可获取到相应群的webhook,其格式如下 ...
- string::at
char& at (size_t pos); const char& at (size_t pos) const; #include <string>#include &l ...