學(xué)習(xí)Kotlin有十來天了,趕覺還是蠻爽的,特別是在接觸lambda表達(dá)式后,當(dāng)然Java8后也支持了這些方式。
拋個問題
在使用convert java file to kotlin file 中,有很多Java語法轉(zhuǎn)過來需要手動修改,比如我這里就遇到了一個Handle報紅
這是Java里的原方法

這是自動轉(zhuǎn)換后的Kotlin函數(shù)

Kotlin編譯器提示說沒有被初始化,因此不能被使用。此后上了一圈度娘,發(fā)現(xiàn)基本都是這種寫法

我就不太喜歡,但又想不出解決辦法了,于是轉(zhuǎn)身找了修煉成功的郭神解決了這個問題。
郭神解釋了一波這里編譯不通過的原因,原話如下:出現(xiàn)這個問題是因為你在Handler的構(gòu)造函數(shù)里面添加的一個匿名類實現(xiàn),而構(gòu)造函數(shù)要執(zhí)行完才會給你的mHandler變量賦值,所以kotlin的編譯器會認(rèn)為,你的回調(diào)方法執(zhí)行的時候mHandler可能還未賦值。在java中編譯器當(dāng)然是不管的,大不了就是空指針,但是kotlin在這方面檢查很嚴(yán)格。 解決方法有兩種,一種是你專用寫一個內(nèi)部類做回調(diào),不要直接寫在Handler的構(gòu)造函數(shù)里面,這樣kotlin編譯器就不會檢查了。另外一種方法是在回調(diào)里面直接通過msg.target來獲取Handler對象,這種更簡單。另外你的匿名類寫法還可以用lambda進(jìn)行優(yōu)化,現(xiàn)在的寫法太累贅了,我寫一個優(yōu)化版的發(fā)給你看看。

于是得到了“真?zhèn)鳌保D(zhuǎn)身修改,nice!灰常感謝郭神幫忙解惑!

拋給讀者一句話
Kotlin中it這個東東非常強(qiáng)大,有些類似于Java中的this,我目前也還在探路中。另外Kotlin中對lambda的支持也非常nice,用起來愛不釋手。OK,到此結(jié)束!