包对象何时初始化?

时间:2012-06-11 01:20:20

标签: scala packages

如果我定义一个包对象

package com.something.else

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

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

import com.something.else.more

此对象(及其成员)何时初始化/构建?

换句话说,是什么决定了more.time的价值? 是否在程序首次启动时进行评估?或者第一次访问它?或者第一次访问more

1 个答案:

答案 0 :(得分:7)

很容易检查:

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毫秒后,所以首次访问包对象时,就像任何其他对象一样。