Kotlin學習系列之:理解Backing Field

對於Backing Field這個概念,在Java中是沒有的,是Kotlin中新引入的概念。我們先來看看它在什麼情況下使用:

class Person {

    var username: String = "hello"
    get() {
        println("getter invoked...")
        return field
    }
    set(value) {
        println("setter invoked...")
        field = value
    }
}

要想理解Backing Field,首先要明確一點:在Java中,通常將域(成員變量,Field)和它的訪問器(Setter/Getter)聯合起來稱作是屬性(Property);但是在Kotlin中,屬性是作爲一級語言特徵,完全替代域和訪問器的概念。

舉個例子,我們定義一個類:

class User(val name: String, var age: Int)

然後我們在main函數中使用它:

fun main(args: Array<String>){
    val user = User(“zhangsan”, 25)
    println(user.name)
    user.age = 29
    println(user.age)
}

可以看出,無論是獲取還是改變這個User裏的age,從字面上看來都是age這個屬性,都是它本身,是把它當做是不可分割的整體。而在Java中,要想實現前面的一樣的效果,是需要有三部分:首先你得聲明一個成員變量(域),然後爲其生成對應的set、get方法才能實現讀取和更新的功能。

明確了這兩點之後,Backing Field的作用就可以體現了,類比到Java上,就是你聲明的那個成員變量,是真正存儲屬性值的地方

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章