天天看點

淺談Kotlin(七):lateinit、by lazy 使用

Kotlin中有兩種延遲初始化的方式。一種是lateinit var,一種是by lazy。

一、lateinit的使用

淺談Kotlin(七):lateinit、by lazy 使用

按Java的寫法,此時即代表datas預設為null,但是因為Kotlin的非空機制,這裡給出了兩種選擇,要不給一個初始值,要不增加lateInit修飾

 則可以這麼寫:

表示初始即為null

改寫法需要在後面使用的時候進行非空判斷:

否則編譯不通過,提示:

也可以這麼寫:

表示我先不給一個初始值,編譯期的時候也無需進行非空判斷,後面我會找時機給他指派

即late的作用為編譯期在檢查時不要因為屬性變量未被初始化而報錯

當然若在使用該變量的時候仍未給指派,則會報錯

lateinit使用限制:

隻能用來修飾類屬性,不能用來修飾局部變量,

隻能用來修飾對象,不能用來修飾基本類型(因為基本類型的屬性在類加載後的準備階段都會被初始化為預設值)。

二、by lazy的使用

用法即先不進行初始化操作,直到第一次使用的時候再進行初始化

如上,先進行聲明lazyParm屬性,直到後面執行到Log操作用到了lazyParm時再進行初始化

by lazy使用限制:

要求屬性聲明為<code>val</code>,即不可變變量,在java中相當于被<code>final</code>修飾。

可以使用于類屬性或者局部變量。

作者:聽着music睡

出處:http://www.cnblogs.com/xqxacm/

Android交流群:38197636

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。