本文作者: 楊曉輝
本文鏈接: 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}")
}
更多關于擴展函數/方法的例子可以參考官方網站