何时以及如何调用 Scala 包对象构造函数?
我有两节课:
包.scala
package my;
package object entities {
//Some initialization code in constructor
}
经典的.scala
package my.entities;
case class Classy {
}
我试图让实体构造函数在创建 Classy 对象时已经执行。
何时以及如何调用 Scala 包对象构造函数?
我有两节课:
包.scala
package my;
package object entities {
//Some initialization code in constructor
}
经典的.scala
package my.entities;
case class Classy {
}
我试图让实体构造函数在创建 Classy 对象时已经执行。
包对象被翻译成一个普通的 java 类文件,称为package.class IIRC。从那时起,我假设它的行为类似于任何普通的 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
。