当前位置: 首页 > 知识库问答 >
问题:

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

施晗日
2023-03-14

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

internal val connector by lazy {
        serviceConnector
    }
internal val connector : ServiceConnector
        get() = serviceConnector

什么时候使用哪种方法,这两种方法实际上是在下面进行的。哪一种方法是最好的?

共有1个答案

毋宸
2023-03-14

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

相反,get()用于重新定义尝试访问val时发生的事情。

 类似资料:
  • 惰性初始化 是一个接受lambda并返回实例的函数,该实例可以作为实现lazy属性的委托:对的第一次调用执行传递给的lambda并记住结果,随后对的调用只返回记住的结果。 例 修饰符只能用于在类主体中声明的var属性(而不是在主构造函数中),并且只能在属性没有自定义getter或setter时使用。属性的类型必须是非空的,并且不能是基元类型。 那么,既然这两个选项都能解决同样的问题,如何在这两个选

  • 今天我学习了一个教程,作者在其中解释了hibernate关联一对多/多对一。我不想把他所有的代码都写在这里。所以,我试着把重点放在。。。 我们有两个实体:“团队”和“球员” 在代码中,我们有: 和 我最感兴趣的是回迁的类型。所以,我们加入了一支球队和一些属于这支球队的球员。我的DAO类标记为 现在我想从数据库中加载充满玩家集合的团队实体。 结果是,我将得到LazyInitializationExc

  • 问题内容: Kotlin 中的静态初始化块等效于什么? 我了解Kotlin的设计宗旨是不带静电。我正在寻找具有等效语义的东西-首次加载该类时,代码将运行一次。 我的特定用例是,我想从Android AppCompat库启用DayNight功能,并且说明要求将一些代码放入类的静态初始化块中。 问题答案: 从某种角度看,Kotlin中的s等同于Java类的静态部分。特别是,它们是在首次使用类之前初始化

  • Spring IOC在启动时创建并初始化bean。bean的创建和初始化有什么区别? 在使用@Lazy时,据说用@Lazy注释的bean将被惰性地实例化。这是否意味着,该bean将在ApplicationContext启动时创建[像其他未使用@Lazy注释的bean一样],并在首次引用时初始化?

  • 我有这样的代码: 当我们没有任何其他getInstance的静态方法时,是否初始化了此单例惰性?据我所知,类只在某些情况下初始化,比如: 类的实例是使用new()关键字或使用类的反射创建的。forName(),它可能在Java中引发ClassNotFoundException (Surce:http://javarevisited.blogspot.com/2012/07/when-class-l

  • 谷歌codelab Android Room with a View-静态编程语言有以下片段: 根据我对这个答案的理解,自定义getter每次都会被评估,而赋值只在构建时评估。因此,实际上,