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委托属性的更多相关文章

  1. ViewBinding 与 Kotlin 委托双剑合璧

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭 ...

  2. Kotlin的属性委托:无上下文情况下Android的赋值(KAD 15)

    作者:Antonio Leiva 时间:Mar 9, 2017 原文链接:https://antonioleiva.com/property-delegation-kotlin/ 如我们在前面文章中读 ...

  3. kotlin 委托

    委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理. Kotlin 直接支持委托模式,更加优雅,简洁.Kotlin 通过关键 ...

  4. Kotlin 委托(1)类委托、变量委托注意事项

    1.官方文档 英文: https://kotlinlang.org/docs/reference/delegation.html https://kotlinlang.org/docs/referen ...

  5. Kotlin代理属性--官方文档翻译

    代理属性 Delegated Properties 本文为个人翻译的Kotlin官方文档, 原文连接: Delegated Properties 一些特定的常见类型的属性, 尽管我们可以在每次需要的时 ...

  6. Kotlin 委托(2)变量委托是什么、自定义变量委托

    1.委托是什么? 1.1 官网示例 在每个变量委托的实现的背后,Kotlin 编译器都会生成辅助对象并委托给它. 假设委托如下, class C { var prop: Type by MyDeleg ...

  7. python cookbook第三版学习笔记十七:委托属性

    我们想在访问实例的属性时能够将其委托到一个内部持有的对象上,这经常用到代理机制上 class A:     def spam(self,x):         print("class_A: ...

  8. kotlin 委托类的初始化函数

    import java.beans.AppletInitializer import kotlin.reflect.KProperty fun main(arg: Array<String> ...

  9. Android kotlin静态属性、静态方法

    只需要用 companion object 包裹相应代码块即可.以静态属性为例: class Constants { companion object { val BASE_URL = "h ...

随机推荐

  1. kbmMW 5.10.01试用报告

    1.FileClient.SameFile 调用这个方法,当本地文件不存在时,会一直等待.跟踪代码,发现: function TkbmMWCustomFileClient.SameFileEx(Loc ...

  2. Dephi 10.3.3试用报告

    官方没有正式发布,但出了下载及keygen,具体内容我在这篇内容写了:Delphi 10.3.3最新消息 . 也可以去Delphi多层开发交流QQ群:209321818找相关的keygen. 今早来就 ...

  3. 如何使用Metasploit进行汽车安全性测试

    前言 针对汽车的攻击和入侵是当前最前沿的领域和最热门的话题之一.随着自动驾驶汽车技术的发展,在未来这个领域将变得更加重要.作为汽车黑客快速发展的一部分,我最喜欢的黑客工具之一Metasploit也开发 ...

  4. 服务器CPU架构演变过程

    第一阶段: 单CPU,没啥好说的.和我们今天打游戏的台式机差不多. 第二阶段: 双CPU 或者 多CPU的SMP架构 或者 AMP架构.参考:http://www.lauterbach.com/smp ...

  5. C#中两个List<TModel>中根据指定条件--判断并获取不同数据的数据集合2

    方式一:Linq List<Test> list = new List<Test>(); list.Add(new Test { score = 10, name = &quo ...

  6. *p 和p[i] 区别

    注意:*(arr+ n -1)指向的 是原来&a[n-1]是个地址 与arr[n-1]不同 !!重点!

  7. Reverse链表

    之前学习了关于reverse数组相关的东东(http://www.cnblogs.com/webor2006/p/6727419.html),这次再来对链表进行reverse一下,在面试中也很容易被问 ...

  8. hibernate的详解

    一,环境的搭建 1)创建maven项目 2)导入依赖的jar包.pom.xml和创建实体类User <?xml version="1.0" encoding="UT ...

  9. JS 日期格式化,留作参考

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Python和Shell交互工具 ShellPy

    ShellPy 是一款Python和Shell的交互工具.一般来说,我们会通过Subprocess.Popen或者Command模块执行一条Shell命令或脚本,然后通过返回的标准输出和错误输出来得到 ...