scala - val 或 object 表示不可变的最终单例对象

标签 scala object singleton language-features library-design

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

这个

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

还是这个?

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

最佳答案

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

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

关于scala - val 或 object 表示不可变的最终单例对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6125134/

相关文章:

c++ - 在 C++ 中将对象数组设置为 null

javascript - 如何根据先前的对象数组创建正确的数组结构? JavaScript

android - 在 kotlin 中使用房间作为单例

java - 斯卡拉 : function to measure the runtime of any other function

scala - 是否有任何Scala功能允许您调用名称存储在字符串中的方法?

java - 将变量和对象设置为 null 有帮助吗?

php - 如何解决 Lumen/Laravel 中的单例问题?

caching - 避免单例和全局变量——但是缓存、提供者、 Controller ……呢?

scala - 如何在 Scala 中没有早期初始化程序的情况下为父类(super class)构造函数创建参数

scala - 如何使用 Scala 生成哈希码