Kotlin的擴展函數/屬性

本文作者: 楊曉輝

本文鏈接: 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官方文檔(英文)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • @synthesize和@dynamic分別有什么作用?@property有兩個對應的詞,一個是 @synthes...
    筆筆請求閱讀 531評論 0 1
  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態類型編程...
    任半生囂狂閱讀 26,252評論 9 118
  • Google在今年的IO大會上宣布,將Android開發的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍灰_q閱讀 76,981評論 31 489
  • ¥關閉¥ 【雷霆戰機】 〖http://pan.baidu.com/s/1kVstszX〗 《解壓源碼后直接用AI...
    小菜c閱讀 9,503評論 0 19
  • 那一年一首認真的雪讓我認識了你 青澀而懵懂的你 后來你杳無音訊 我甚至以為你已退出娛樂圈 直到15年演員這首歌讓我...
    潮流季閱讀 338評論 0 0