DEVLOG 11.29 近期收集的一些問題(一)Kotlin相關(guān)
Q1: 如何理解Kotlin中的getter和setter ?
A1: getter和setter我們通常這樣使用:
其中field只能在setter中使用,表示當(dāng)前的字段的值。
具體轉(zhuǎn)換成字節(jié)碼是這樣的:
所以,如果我們給Kotlin中的一個變量定義了get和set方法的話,我們在獲取這個變量的內(nèi)容的時候,在Java層面,回去調(diào)用編譯器實現(xiàn)的一個getA方法,并且返回結(jié)果。
而使用set的時候會去調(diào)用setA,雖然實實在在的改變了a的值,但是因為我們寫了get,所以還是會返回getA的結(jié)果。
對于定義的一個普通的變量a,編譯器也會給他定義get和set和Java POJO中我們手寫的差不多:

Q2:延遲初始化lateinit var是如何實現(xiàn)的?
A2: 我們通常采用延遲初始化的方式對于一個我們不確定在何時初始化比較方便時的變量進行初始化。如果這個變量沒有被初始化,就會拋出異常:
第二個println會拋出異常。
具體的實現(xiàn)是通過在getter中定義檢查的語句,如果在獲取這個變量的值時為空,拋出異常:
標(biāo)簽: