本文作者: 杨晓辉
本文链接: http://youngxhui.github.io/2017/08/12/Kotlin-扩展函数-属性/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。
前言
扩展函数和扩展属性在 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}")
}
更多关于扩展函数/方法的例子可以参考官方网站