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

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