【问题标题】:Difference between lazy{} vs getter() initialization in kotlinkotlin 中lazy{} 与 getter() 初始化之间的区别
【发布时间】:2019-03-17 19:19:14
【问题描述】:

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

延迟初始化:

internal val connector by lazy {
        serviceConnector
    }

getter():

internal val connector : ServiceConnector
        get() = serviceConnector

何时使用哪种方法以及这两种方法在幕后的实际作用。哪种方法最好?

【问题讨论】:

    标签: android kotlin getter-setter lazy-initialization


    【解决方案1】:

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

    get() 相反,用于重新定义当您尝试访问val 时会发生什么。

    【讨论】:

    • 如果,我要更改服务连接器?
    • 我编辑了我的答案,因为第二部分是错误的。当您更改serviceConnector 时,您也更改了get() 返回的内容,因为每次访问connector 时,您都会运行get() 中的代码。使用 lazy 代替,val 在第一次使用时分配,然后不再更改。
    • 我们可以同时使用lazy和get吗,我不知道如何使用get来修改getter在同一个变量上调用by lazy的行为,谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2021-09-23
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    相关资源
    最近更新 更多