kotlin-匿名Handle的優(yōu)雅實現(xiàn)

學(xué)習(xí)Kotlin有十來天了,趕覺還是蠻爽的,特別是在接觸lambda表達(dá)式后,當(dāng)然Java8后也支持了這些方式。

拋個問題

在使用convert java file to kotlin file 中,有很多Java語法轉(zhuǎn)過來需要手動修改,比如我這里就遇到了一個Handle報紅
這是Java里的原方法


handler-java.png

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


handler-kotlin.png

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


圖片.png

我就不太喜歡,但又想不出解決辦法了,于是轉(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ā)給你看看。


圖片.png

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


圖片.png

拋給讀者一句話

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,669評論 9 118
  • Google在今年的IO大會上宣布,將Android開發(fā)的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍(lán)灰_q閱讀 77,184評論 31 489
  • printf函數(shù)提供格式化輸出轉(zhuǎn)換。格式串包含兩種類型的對象:普通字符(直接被復(fù)制到輸出流中)和轉(zhuǎn)換字符(分別決定...
    NapoleonY閱讀 395評論 0 2
  • 2018.04.17 周三 晴 大風(fēng) 果然,今天起床后,兒子的腳就好了,立馬變得活蹦亂跳。 下午回來,兒子告訴我他...
    戴驍勇閱讀 231評論 0 0
  • 上周芒果臺上了一檔新節(jié)目——《中餐廳》,雖然也是關(guān)于做菜的,但做菜的人才是重頭戲。這年頭一檔節(jié)目火了,就會誕生了N...
    靜話心是閱讀 355評論 0 0

友情鏈接更多精彩內(nèi)容