【问题标题】:When does init block of object get called?什么时候调用对象的 init 块?
【发布时间】:2020-01-11 11:36:31
【问题描述】:

我试图知道何时使用以下代码在 Kotlin 中调用 objectinit 块,但我在控制台中没有得到任何结果:

fun main(args: Array<String>) {
    TestObj
    TestObj
}

object TestObj {
    var count = 0

    init {
        fun howManyTimes() {
            println(++count)
        }
    }
}

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    接受的答案对您的问题是正确的,但您的特定问题的正确答案是:

    如果是class实例化,则init在构造函数被调用之前被执行。

    如果它是object,根据 Kotlin 文档,每当第一次调用(单例)对象时都会调用它,因为静态对象是惰性初始化的。

    【讨论】:

      【解决方案2】:

      您在控制台中没有得到任何输出,因为您在 init 块内声明函数,而不是调用它。

      TestObj代码更改为:

      object TestObj {
      
          var count = 0
      
          init {
              howManyTimes()
          }
      
          fun howManyTimes() {
              println(++count)
          }
      }
      

      【讨论】:

        【解决方案3】:

        上面的答案清楚地解释了为什么你没有得到预期的输出,我会试着回答你的问题

        什么时候调用 init 对象块?

        来自kotlin in action

        init 关键字引入了一个初始化块。这样的块包含 创建类时执行的初始化代码,并且是 旨在与主要构造函数一起使用。因为 主构造函数有一个受约束的语法,它不能包含 初始化代码;这就是为什么你有初始化块。如果你 想要的话,你可以在一个类中声明多个初始化块。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-20
          • 1970-01-01
          • 2021-09-10
          • 2019-10-23
          • 2020-11-05
          • 1970-01-01
          • 2019-12-25
          • 2012-05-14
          相关资源
          最近更新 更多