美文网首页中北软院创新实验室
Kotlin的扩展函数/属性

Kotlin的扩展函数/属性

作者: 一个正在成为码农的人 | 来源:发表于2017-10-17 11:52 被阅读31次

    本文作者: 杨晓辉

    本文链接: http://youngxhui.github.io/2017/08/12/Kotlin-扩展函数-属性/

    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。

    转载请注明出处!http://youngxhui.github.io/2017/08/12/Kotlin-%E6%89%A9%E5%B1%95%E5%87%BD%E6%95%B0-%E5%B1%9E%E6%80%A7/#hcq=ft0uhyq

    前言

    扩展函数和扩展属性在 Java 里面是没有的,这样的话很好的弥补了 Java 的缺陷。所谓扩展方法或者属性是指在原来没有的方法或者属性上进行扩展,不会改变原来的属性和方法。

    扩展函数

    声明扩展函数的方法是先写上要扩展的类名,之后在写扩展方法。

    对 Book 这个类进行扩展,这个类只有一个方法,在我们不修改 Book 类的前提下对其进行扩展。

    class Book(val name: String, var price: Int) {
        val ISBN: Int = 123456789
        fun add() {
            println("Add a book,name is $name,price is $price,ISBN is $ISBN")
        }
    }
    
    fun Book.show() = add()
    

    这样我们便完成了对 Book 类进行扩展。

    在扩展函数中,可以使用原有类的方法,变量。

    fun main(args: Array<String>) {
        val book = Book("红楼梦", 50)
        book.show()
    }
    

    扩展是静态解析的
    扩展不能真正的修改他们所扩展的类。通过定义一个扩展,你并没有在一个类中插入新成员, 仅仅是可以通过该类型的变量用点表达式去调用这个新函数。

    扩展属性

    扩展属性不能初始化器,所以只能是使用显示 get/set 方法进行定义。

    任就采用上面的例子。给 Book 添加一个 profit 属性。

    像这个样子,我们就定义了这个类的扩展属性

    val Book.profit: Int
        get() = price - 20
    
    fun main(args: Array<String>) {
        val book = Book("红楼梦", 50)
        book.show()
        println("book's profit is ${book.profit}")
    }
    

    更多关于扩展函数/方法的例子可以参考官方网站

    kotlin官方文档(中文)

    kotlin官方文档(英文)

    相关文章

      网友评论

        本文标题:Kotlin的扩展函数/属性

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