1.如果是值可修改的变量(即在之后的使用中可能被重新赋值),使用 lateInit 模式
2.如果变量的初始化取决于外部对象(例如需要一些外部变量参与初始化),使用 lateInit 模式。这种情况下,lazy 模式也可行但并不直接适用。
3.如果变量仅仅初始化一次并且全局共享,且更多的是内部使用(依赖于类内部的变量),请使用 lazy 模式。从实现的角度来看,lateinit 模式仍然可用,但 lazy 模式更有利于封装你的初始化代码。
总结
综上所述,不考虑对变量值是否可变的控制,lateinit 模式是 lazy 模式的超集,你可以在任何使用 lazy 模式的地方用 lateinit 模式替代,反之则不然。但在可能的情况下,请尽量使用 lazy 模式,因为 lateinit 模式在函数中暴露了太多的逻辑代码,使得代码更加混乱,相比而言,lazy 模式更好地封装了细节,且更安全。
总结而言,对于变量的初始化,优先选择 lazy 模式,其次再考虑 late 模式……实在不行,选择最原始的方法手动实现。尽量做个懒人吧