对于不可变的最终单件对象的值或对象
问题描述:
考虑到更改是源兼容的,通常应该选择哪个解决方案?对于不可变的最终单件对象的值或对象
这
object Foo {
val Bar = new Baz(42, "The answer", true)
}
或那样吗?
object Foo {
object Bar extends Baz(42, "The answer", true)
}
答
两个结构之间的功能差异在于object Bar
仅在需要时才创建,而val Bar
只要使用object Foo
即可创建。实际上,这意味着你应该使用该对象(或lazy val
),如果右侧昂贵并且不总是需要的话。否则,val
可能更简单。
另外请注意,如果类Baz
是决赛,你将无法使用object
风格,因为你不能延长Baz
(虽然你仍然可以使用lazy val
,如果你想,直到它的需要推迟创建) 。
答
我说第一,因为在第二,要创建一个新的类,但不添加任何信息(无的方法,值或新的压倒一切)。
如果你想在未来以不同的方式模块化你的API,而不需要太多的修改,那么我会说第一个更好......但是由于这个改变是源代码兼容的,你可以保留第二个,直到需要。 – 2011-05-25 13:37:42
可能重复[val和对象在一个scala类?](http://stackoverflow.com/questions/3448691/val-and-object-inside-a-scala-class) – Bergi 2016-05-25 03:59:53