zoukankan      html  css  js  c++  java
  • 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()
    }

    输出结果和上面一样!

  • 相关阅读:
    [置顶] 怎么对待重复的代码
    AIX和Linux中wtmp的不同处理方式
    Visio 下载,及密钥
    全局变量和局部变量
    UNIX网络编程--IPV4 IPV6 ICMPV4 ICMPV6
    Android XML文档解析(一)——SAX解析
    rnqoj-30- [stupid]愚蠢的矿工-树形DP
    linux 文件内容的复制
    主流视音频平台参数
    FTP原理
  • 原文地址:https://www.cnblogs.com/loaderman/p/10142898.html
Copyright © 2011-2022 走看看