【问题标题】:When are package objects initialized?什么时候初始化包对象?
【发布时间】:2012-06-13 23:30:37
【问题描述】:

如果我定义一个包对象

package com.something.else

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

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

import com.something.else.more

这个对象(及其成员)何时初始化/构造?

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

【问题讨论】:

  • 我的猜测是类加载器第一次加载更多内容时,但我现在无法检查...

标签: scala packages


【解决方案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 毫秒之后,所以它是第一次访问包对象的时间,就像访问任何其他对象一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多