美文网首页
10.Kotlin扩展作用域分析与扩展的根本作用解析

10.Kotlin扩展作用域分析与扩展的根本作用解析

作者: leofight | 来源:发表于2017-12-24 16:49 被阅读0次

    1.扩展属性

    与函数类似,Kotlin支持扩展属性。

    • 示例代码
    class MyExtensionProperty
    
    val MyExtensionProperty.name: String
        get() = "hello"
    
    
    fun main(args: Array<String>) {
        var myExtensionProerty = MyExtensionProperty();
        println(myExtensionProerty.name)
    }
    
    • 运行结果
    hello
    

    2.伴生对象扩展

    • 示例代码
    
    class CompanionObjectExtension {
        companion object MyObject {
    
        }
    }
    
    fun CompanionObjectExtension.MyObject.method() {
        println("hello world")
    }
    
    fun main(args: Array<String>) {
        CompanionObjectExtension.method()
    }
    
    • 运行结果
    hello world
    

    3.扩展的作用域

    扩展的作用域
    ①扩展函数所定义的类实例叫做分发接收者(dispatch receiver)
    ②扩展函数所扩展的那个类的实例叫做扩展接收者(extension receiver)
    ③当以上两个名字出现冲突时,扩展接收者的优先级最高。

    • 示例代码
    class DD {
        fun method() {
            println("DD method")
        }
    }
    
    class EE {
        fun method2() {
    
        }
    
        //对DD扩展
        fun DD.hello() {
            method()
            method2()
        }
    
        fun world(dd: DD) {
            dd.hello()
        }
    
        fun DD.output() {
            println(toString())
            println(this@EE.toString())
        }
    
        fun test() {
            var dd = DD()
            dd.output()
        }
    }
    
    fun main(args: Array<String>) {
        EE().test()
    
    
    }
    
    • 运行结果
    com.leofight.kotlin.DD@7440e464
    com.leofight.kotlin.EE@49476842
    

    扩展可以很好地解决Java中充斥的各种辅助类问题
    Collections.swap(list,4,10)
    list.swap(4,10) //这样语义更明确,可使用kotlin扩展
    Collection.binarySearch()
    list.binarySearch(...)//这样语义更明确,可使用kotlin扩展

    相关文章

      网友评论

          本文标题:10.Kotlin扩展作用域分析与扩展的根本作用解析

          本文链接:https://www.haomeiwen.com/subject/ukdhgxtx.html