Kotlin筆記-屬性

定義常量與變量

類中聲明的屬性,一定要初始化,否則會編譯錯誤。除非你對屬性使用了abstract進行修飾。

    var name: String = ""
    //abstract var size : Int//必須在抽象類中使用

    var boss = "L"

可變變量定義:var 關鍵字

var <標識符> : <類型> = <初始化值>

不可變變量定義:val 關鍵字,只能賦值一次的變量(類似Java中final修飾的變量)

val <標識符> : <類型> = <初始化值>

常量與變量都可以沒有初始化值,但是在引用前必須初始化
編譯器支持自動類型判斷,即聲明時可以不指定類型,由編譯器判斷。

val a: Int = 1
val b = 1       // 系統自動推斷變量類型爲Int


var x = 5        // 系統自動推斷變量類型爲Int
x += 1           // 變量可修改

getter和setter

我們可以按照下面的方式對屬性進行讀寫操作:

        var company=Company()
        company.name

不同於java,這其實就是對getter和setter方法的隱式調用,是默認的實現,顯示寫出來應該是以下:

    var boss = "L"
        get() = field
        set(value) {
            field=value
        }

訪問權限

如果我們不想公開某個方法時,可以使用private修飾符實現

        var name: String = ""
        private set

此時外部就不能修改這個值了,get不能這樣使用,get的訪問權限和屬性是一致的

自定義getter和setter

既然知道了getter和setter的默認實現,那麼我們就可以進行自定義實現

        var address: String = ""
        get() = if (field.length > 0) "" else "大家好看"
        set(value) {
            field = if (value.length > 0) "" else value
        }

field

在上面我們用到了一個field,在Kotlin中getter和setter不允許使用局部變量的,因爲對屬性的調用也就是對getter的調用,這樣很容易產生遞歸,造成內存溢出。所以Kotlin爲我們提供了field,用這個field代替屬性本身進行操作

lateinit

lateinit關鍵字是用於延遲初始化的,我們在類中聲明的屬性必須初始化。
假如想在類內聲明一個NULL屬性,在需要時再進行初始化,這時就需要用到了

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