android 代碼轉(zhuǎn)換成Kotlin代碼時(shí),有些在Android中定義的未初始化變量,會(huì)在轉(zhuǎn)成Kotlin代碼時(shí)報(bào)Property must be initialized or be abstract錯(cuò)誤。這是由于Kotlin的語法規(guī)范所致,kotlin的變量一般需要在定義的時(shí)候就進(jìn)行賦值。如果非要定義時(shí)不賦值,就需要使用kotlin的lateinit修飾符修飾定義的變量,以指定其將在稍后賦值。但目前Android Studio 2.3自帶的Java代碼轉(zhuǎn)Kotlin代碼的功能,并沒有針對(duì)此種變量做處理,導(dǎo)致直接轉(zhuǎn)換會(huì)報(bào)錯(cuò)。
方法/步驟
1、一般的activity是這樣的,定義個(gè)輸入框變量

2、通過 Code→Convert Java File to Kotlin File 或者快捷鍵 Ctrl+Alt+Shift+K將Java代碼轉(zhuǎn)換成Kotlin代碼

3、Java代碼成功轉(zhuǎn)換成了Kotlin代碼,但定義的輸入框變量卻報(bào)錯(cuò)了。查看錯(cuò)誤信息是
Property must be initialized or be abstract。

4、也就是說Kotlin中定義的變量,要么是定義時(shí)就初始化,要么就定義成抽象的。但顯然這里不能定義成抽象的,那就試著直接初始化。

5、初始化后,果然不再報(bào)錯(cuò)。那就直接運(yùn)行,卻發(fā)現(xiàn)App直接停止運(yùn)行了。查看錯(cuò)誤日志,

6、很顯然,我在初始化控件時(shí),Context還沒初始化,導(dǎo)致了空指針異常。說明定義控件時(shí)就初始化不能解決剛才Kotlin報(bào)的錯(cuò)誤。
幾番查閱Kotlin語法、搜索資料后,才發(fā)現(xiàn),Kotlin有一個(gè)lateinit修飾符。字面意思就可以知道它是表名變量需要在定義后才賦值的。
使用 lateinit修飾后,就可以愉快地玩耍了。

VeVb提示:
Android Studio 3.0后自帶Kotlin,無需安裝插件
此經(jīng)驗(yàn)基于Android Studio 2.3,3.0以后可能與此有出入
新聞熱點(diǎn)
疑難解答
圖片精選