一:聲明屬性
kotlin類中屬性可以使用關(guān)鍵字var也可以使用val,使用一個屬性只需要在類實例后引用即可
class B(var name:String, val age:Int){}
fun main(){
var b = B()
b.name
b.age
}
二:getter和setter
聲明一個屬性的完整語法
var <propertyName> [: <propertyType] [= <property_initializer>]
[<getter>]
[<setter>]
其中初始化器(initializer)羽戒、getter怕敬、setter都是可選的,屬性類型如果可以從初始化器或者getter返回值中推斷
出來也可以省略龄章。
我們可以為屬性自定義訪問器get箕速,每次訪問該屬性就會調(diào)用該get函數(shù)
val isEmpty : Boolean
get() = this.size ==0
val isEmpty get() =this.size == 0 //isEmpth的類型由get的返回值類型自動判斷
如果我們自定義了set旱易,那么每次給屬性賦值都會調(diào)用它
var name: String
get() = this.toString
set(value) {
show(value) //setter參數(shù)的默認(rèn)函數(shù)一般是value,但如果你喜歡可以使用別的名字岖瑰。這里一般做些別的操作
field = value
}
幕后字段
上個例子中最后只有實現(xiàn)了field=value才能被正確賦值狮杨,那么field是什么呢? 在kotlin中我們不能直接聲明一個字段半沽,當(dāng)我們需要一個字段的時候kotlin會為我們自動提供爽柒,我們稱之為幕后字段,幕后字段一般使用field標(biāo)識符在訪問器中使用,field只能使用在屬性訪問器中者填。
三:編譯器常量
已知值的屬性可以使用const修飾符標(biāo)記為編譯器常量浩村,這些屬性滿足一下要求
- 位于頂層或者是object聲明,或companion object的一個成員
- 以String或者原生類型初始化
- 沒有自定的getter
四:延遲初始化屬性與變量
一般屬性聲明非空類型必須在構(gòu)造函數(shù)中初始化占哟,但是有時候我們并不想在類實例化時對變量進(jìn)行初始化心墅,這時我們需要使用kotlin修飾符lateinit來對屬性進(jìn)行延遲聲明,這個修飾符其實就顯式告訴編譯器榨乎,這里不需要進(jìn)行變量未初始化檢查怎燥,后期需要程序員自行初始化。lateinit只能修飾object類型蜜暑,無法修飾基礎(chǔ)類型
lateinit var p: Person
isInitialized:可以檢查變量是否已經(jīng)初始化