scala - 如果单例如此糟糕,为什么 Scala 为它们提供语言支持?

标签 scala object static singleton anti-patterns

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
Why are singleton objects more object orientated?



为什么 Scala 有对单例反模式的语言支持?如果 Scala 继承了 static来自 Java 的关键字,object 的合法用例是什么?关键字会被留下?

最佳答案

至少有一个前期差异,即 object在 Scala 中实际上是一个对象(即一个实例),而不是在 Java 中它只是在类本身上调用的方法。

这意味着它避免了关于单例的主要提示之一——因为它是一个实例,它可以被传递并连接到方法中,因此可以在测试等期间被替换为其他实现。如果有的话,它是推荐的单例替代品 - 有一个带有 getInstance() 的类方法返回默认的单个实例。

也就是说,我认为单例反模式更多的是关于设计而不是语言特性。如果您构建您的代码库,以便在大多数类中隐式连接一些整体依赖项,那么您将在更改它时遇到问题 - 无论语言功能如何。
objects 有合法用例在 Scala 中(例如,将 case objects 用于 messages to Actors ,或者让其中几个将 sealed trait 扩展为 alternative to enums )。语言特性可以被滥用,但在我看来,它不如 Java 的 static 容易被滥用。 ,而且更有用。

关于scala - 如果单例如此糟糕,为什么 Scala 为它们提供语言支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11755826/

相关文章:

java - 尝试从迭代器中删除 SelectionKey 时抛出 UnsupportedOperationException

scala - 如何在Scala中循环播放每一行

scala - Scala 2.8 和 Scala 2.7 之间最大的区别是什么?

java - 将对象类型转换成一对

c - 使用函数指针的静态结构初始化

scala - 获取 "how can getCommonSuperclass() do its job if different class symbols get the same bytecode-level internal name"编译错误

javascript - 查找子属性键值并返回父对象,如果值为真 LODASH

javascript - 如何调用 .js 对象中包含 '-' 的变量

java - 测试静态方法类必须更改为单例以进行 JUnit 测试

c++ 和 zlib 静态库