android 代碼轉(zhuǎn)換成Kotlin代碼時,有些在Android中定義的未初始化變量,會在轉(zhuǎn)成Kotlin代碼時報Property must be initialized or be abstract錯誤。這是由于Kotlin的語法規(guī)范所致,kotlin的變量一般需要在定義的時候就進(jìn)行賦值。如果非要定義時不賦值,就需要使用kotlin的lateinit修飾符修飾定義的變量,以指定其將在稍后賦值。但目前Android Studio 2.3自帶的Java代碼轉(zhuǎn)Kotlin代碼的功能,并沒有針對此種變量做處理,導(dǎo)致直接轉(zhuǎn)換會報錯。
方法/步驟
1、一般的activity是這樣的,定義個輸入框變量
2、通過 Code→Convert Java File to Kotlin File 或者快捷鍵 Ctrl+Alt+Shift+K將Java代碼轉(zhuǎn)換成Kotlin代碼
3、Java代碼成功轉(zhuǎn)換成了Kotlin代碼,但定義的輸入框變量卻報錯了。查看錯誤信息是
Property must be initialized or be abstract。
4、也就是說Kotlin中定義的變量,要么是定義時就初始化,要么就定義成抽象的。但顯然這里不能定義成抽象的,那就試著直接初始化。
5、初始化后,果然不再報錯。那就直接運行,卻發(fā)現(xiàn)App直接停止運行了。查看錯誤日志,
6、很顯然,我在初始化控件時,Context還沒初始化,導(dǎo)致了空指針異常。說明定義控件時就初始化不能解決剛才Kotlin報的錯誤。
幾番查閱Kotlin語法、搜索資料后,才發(fā)現(xiàn),Kotlin有一個lateinit修飾符。字面意思就可以知道它是表名變量需要在定義后才賦值的。
使用 lateinit修飾后,就可以愉快地玩耍了。
VeVb提示:
Android Studio 3.0后自帶Kotlin,無需安裝插件
此經(jīng)驗基于Android Studio 2.3,3.0以后可能與此有出入
新聞熱點
疑難解答
圖片精選