lateinit 和 by lazy的區(qū)別:
是kotlin里面的延遲初始化實現(xiàn),
1.lateinit 只用于變量 var,而 lazy 只用于常量 val
2.lateinit可以在任何位置初始化并且可以初始化多次。而lazy在第一次被調(diào)用時就被初始化,想要被改變只能重新定義
3.lazy 應用于單例模式(if-null-then-init-else-return),當且僅當變量被第一次調(diào)用的時候,想要被改變只能重新定義,委托方法才會執(zhí)行(有點類似懶加載);lateinit可以在任何位置初始化并且可以初始化多次。
4.lateinit 則用于只能生命周期流程中進行獲取或者初始化的變量,比如 Android 的 onCreate()
變量?和!!
? :定義變量時,可在類型后面加一個問號?,表示該變量是Nullable,不加表示該變量不可為null(不加?編譯的時候默認先執(zhí)行非空判斷)。對于可以為null的變量,在使用該變量的時候,必須用變量名+?(如上面的s?)的形式進行調(diào)用,表示如果該變量為null,則不執(zhí)行該變量調(diào)用的方法
! : 表示當前對象不為空的情況下執(zhí)行
val與var
var:定義可變變量
val :定位常量,java里面的final
open關(guān)鍵字
open 注解與java 中的 final相反:它允許別的類繼承這個類。默認情形下,kotlin 中所有的類都是 final ,open用來表示他可以被集成
==和===區(qū)別
1.Referential/引用相等(兩個引用指向同一對象): ===(否定形式!==)是對象引用(地址),即判斷是否同一個對象!
2.Structural/結(jié)構(gòu)相等(用equals()檢查): ==(否定形式!=)是通過equals()函數(shù)進行比較!
let,apply,with,run函數(shù)區(qū)別
http://m.itdecent.cn/p/28ce69d58fea
Kotlin集合
https://blog.csdn.net/xsg2357/article/details/80417980
http://m.itdecent.cn/p/6d95db6e9f87