laterinit 与by lazy 是Kotlin中两种不同延迟初始化的实现。
laterinit 只用于变量var by lazy 只用于常量val
lazy()方法只是接受一个lambda并返回一个Lazy<T> 实例的函数,返回的实例可以作为实现延迟属性的委托:第一次调用get()会执行已传递给lazy()的lambda表达式并记录结果,后续调用get()只是返回记录的结果。
lazy()方法常用于只获取不赋值并且多次使用的对象。
laterinit则用于只能生命周期流程中进行获取或者初始化的变量
laterinit 不能用于可空的属性上和java的基本类型上:(Int、Long等)
laterint 可以在任何位置初始化,并且可以初始化多次。而by lazy只初始化一次
网友评论