当包对象初始化?(When are package objects initialized?)

2019-09-17 23:43发布

如果我定义包对象

package com.something.else

package object more {
    val time = System.currentTimeMillis
    // ... other stuff ...
}

然后将其在源代码中的某处导入。

import com.something.else.more

当这个对象(及其部件)初始化/构造?

换句话说,是什么决定的价值more.time
难道评价第一次启动程序时? 还是第一次被访问? 还是第一次more被访问?

Answer 1:

这很容易检查:

package something

package object more {
  val time = System.currentTimeMillis
}

// in separate file:
package something.more

object Test extends App {
  val now = System.currentTimeMillis

  Thread.sleep(1000)

  println(now)
  println(time)
}

得到:

1339394348495
1339394349496

所述第二时间是〜1000毫秒以后,所以它的当首次访问的包对象,因为这将是与任何其他物体。



文章来源: When are package objects initialized?