7

考虑到更改与源兼容,通常应该首选哪种解决方案?

object Foo {
  val Bar = new Baz(42, "The answer", true)
}

或这个?

object Foo {
  object Bar extends Baz(42, "The answer", true)
}
4

2 回答 2

8

两种构造之间的功能区别在于object Bar仅在需要时val Bar创建,而在使用时立即创建object Foo。实际上,这意味着lazy val如果右侧很昂贵并且并不总是需要,则应该使用对象(或)。否则,val可能更简单。

另外,请注意,如果该类Baz是最终的,您将无法使用该object样式,因为您无法扩展Baz(尽管lazy val如果您想将创建推迟到需要时,您仍然可以使用)。

于 2011-05-25T13:44:51.343 回答
2

我说第一个,因为在第二个中,您正在创建一个新类但不添加任何信息(不覆盖方法、值或新的)。

于 2011-05-25T13:43:38.163 回答