5

パッケージオブジェクトを定義すると

package com.something.else

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

その後、ソース コードのどこかにインポートされます。

import com.something.else.more

このオブジェクト (およびそのメンバー) はいつ初期化/構築されますか?

言い換えれば、 の値を決定するものは何more.timeですか?
プログラムの最初の起動時に評価されますか? それとも初めてアクセスしたときですか?それとも初回moreアクセス?

4

1 に答える 1

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

2回目は約1000ミリ秒後なので、他のオブジェクトと同様に、パッケージオブジェクトに最初にアクセスするときです。

于 2012-06-11T06:01:47.667 に答える