本文作者: 楊曉輝
本文鏈接: http://youngxhui.github.io/2017/08/12/Kotlin-擴(kuò)展函數(shù)-屬性/
版權(quán)聲明: 本博客所有文章除特別聲明外氓润,均采用 CC BY-NC-SA 3.0 許可協(xié)議。
轉(zhuǎn)載請注明出處丈探!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
前言
擴(kuò)展函數(shù)和擴(kuò)展屬性在 Java 里面是沒有的毫蚓,這樣的話很好的彌補(bǔ)了 Java 的缺陷筒严。所謂擴(kuò)展方法或者屬性是指在原來沒有的方法或者屬性上進(jìn)行擴(kuò)展扛芽,不會改變原來的屬性和方法。
擴(kuò)展函數(shù)
聲明擴(kuò)展函數(shù)的方法是先寫上要擴(kuò)展的類名屏箍,之后在寫擴(kuò)展方法绘梦。
對 Book 這個類進(jìn)行擴(kuò)展橘忱,這個類只有一個方法,在我們不修改 Book 類的前提下對其進(jìn)行擴(kuò)展卸奉。
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 類進(jìn)行擴(kuò)展钝诚。
在擴(kuò)展函數(shù)中,可以使用原有類的方法榄棵,變量凝颇。
fun main(args: Array<String>) {
val book = Book("紅樓夢", 50)
book.show()
}
擴(kuò)展是靜態(tài)解析的
擴(kuò)展不能真正的修改他們所擴(kuò)展的類。通過定義一個擴(kuò)展疹鳄,你并沒有在一個類中插入新成員拧略, 僅僅是可以通過該類型的變量用點(diǎn)表達(dá)式去調(diào)用這個新函數(shù)。
擴(kuò)展屬性
擴(kuò)展屬性不能初始化器,所以只能是使用顯示 get/set
方法進(jìn)行定義瘪弓。
任就采用上面的例子垫蛆。給 Book
添加一個 profit
屬性。
像這個樣子腺怯,我們就定義了這個類的擴(kuò)展屬性
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}")
}
更多關(guān)于擴(kuò)展函數(shù)/方法的例子可以參考官方網(wǎng)站