soc*_*soc 7 singleton language-features scala object library-design
考虑到变化是源兼容的,通常应该选择哪种解决方案?
这个
object Foo {
val Bar = new Baz(42, "The answer", true)
}
Run Code Online (Sandbox Code Playgroud)
或这个?
object Foo {
object Bar extends Baz(42, "The answer", true)
}
Run Code Online (Sandbox Code Playgroud)
两个构造之间的功能差异object Bar仅在需要时才创建,而val Bar在object Foo使用时立即创建.实际上,这意味着lazy val如果右侧价格昂贵且不总是需要,则应使用对象(或).否则,val可能更简单.
此外,请注意,如果该类Baz是最终的,您将无法使用该object样式,因为您无法扩展Baz(尽管lazy val如果您想在需要时推迟创建,仍然可以使用该样式).