kotlin 中 lazy{} 与 getter() 初始化之间的区别

0xA*_*iHn 6 android getter-setter lazy-initialization kotlin

在 kotlin 中,我们可以同时使用这两种方法lazy{}getter()

延迟初始化:

internal val connector by lazy {
        serviceConnector
    }
Run Code Online (Sandbox Code Playgroud)

吸气剂():

internal val connector : ServiceConnector
        get() = serviceConnector
Run Code Online (Sandbox Code Playgroud)

何时使用哪种方法以及这两种方法在幕后实际做了什么。哪一种是最好的方法?

gpu*_*nto 9

当您使用lazy委托时,val仅在第一次使用时才会初始化。因此,在您的代码中,第一次访问 时connector,将运行 lambda 内的代码,并将结果分配给val.

get()相反,用于重新定义当您尝试访问val.