1.如果是值可修改的變量(即在之后的使用中可能被重新賦值),使用 lateInit 模式
2.如果變量的初始化取決于外部對象(例如需要一些外部變量參與初始化),使用 lateInit 模式。這種情況下,lazy 模式也可行但并不直接適用髓废。
3.如果變量僅僅初始化一次并且全局共享,且更多的是內(nèi)部使用(依賴于類內(nèi)部的變量)该抒,請使用 lazy 模式慌洪。從實(shí)現(xiàn)的角度來看,lateinit 模式仍然可用柔逼,但 lazy 模式更有利于封裝你的初始化代碼蒋譬。
總結(jié)
綜上所述,不考慮對變量值是否可變的控制愉适,lateinit 模式是 lazy 模式的超集犯助,你可以在任何使用 lazy 模式的地方用 lateinit 模式替代,反之則不然维咸。但在可能的情況下剂买,請盡量使用 lazy 模式,因?yàn)?lateinit 模式在函數(shù)中暴露了太多的邏輯代碼癌蓖,使得代碼更加混亂瞬哼,相比而言,lazy 模式更好地封裝了細(xì)節(jié)租副,且更安全坐慰。
總結(jié)而言,對于變量的初始化用僧,優(yōu)先選擇 lazy 模式结胀,其次再考慮 late 模式……實(shí)在不行,選擇最原始的方法手動(dòng)實(shí)現(xiàn)责循。盡量做個(gè)懶人吧