Scala包对象构造函数

时间:2012-12-29 09:36:21

标签: scala

何时以及如何调用Scala Package对象构造函数?

我有两个班级:

Package.scala

package my;
package object entities {
   //Some initialization code in constructor
}

Classy.scala

package my.entities;
case class Classy {
}

我正在尝试让实体构造函数在创建Classy对象时已经执行。

1 个答案:

答案 0 :(得分:5)

将包对象转换为名为 package.class IIRC的普通java类文件。从那时起,我假设它的行为与任何普通的Java类一样,因此它在首次引用时被加载并实例化。在Scala中,这意味着您需要在包对象中定义一些方法或val,然后从外部访问它。在您的情况下,您可以尝试从Classy的构造函数或实例化Classy的代码中调用它。

更新

好的,这是我跑来测试上面描述的一些代码:

// package.scala
package some

package object pkg {
  println("package created!")

  def func() { println("func called") }
}

// C.scala
package some.pkg

class C {
  println("created C")
}

// G.scala
package some.pkg

object G {
  println("creating G")
  func()
  println("created G")
}

// PackageTester.scala
package some.pkg

object PackageTester extends App {
  val c = new C
  val g = G
}

输出是:

created C
creating G
package created!
func called
created G

这证明Scala包对象是懒惰创建的,只有在它们被实际引用时才会创建。事实上,对于“普通”Scala对象也是如此,正如上面的G所示。