lateinit:var 給別人初始化的承諾 最適合用在生命週期或依賴注入,當你確定某個外部力量會幫你搞定初始化時:
Kotlin
lateinit var adapter: RecyclerView.Adapter fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) adapter = MyAdapter(data) }
lazy:val把昂貴的計算往後推 用在成本高昂、又不一定會用到的唯讀資源,把運算拖到最後一刻:
Kotlin
// 這張圖超大,沒人要看就別浪費記憶體載入 val profileBitmap: Bitmap by lazy { Log.d("Perf", "Loading large bitmap NOW!") BitmapFactory.decodeResource(resources, R.drawable.large_image) }
一個是「之後會有人搞定」的 var,一個是「我只在必要時算一次」的 val。別再用錯地方,浪費那寶貴的資源了。