gpt4 book ai didi

scala - 何时使用单例对象以及何时在 scala 中使用实际对象

转载 作者:行者123 更新时间:2023-12-01 09:06:21 25 4
gpt4 key购买 nike

我想知道在 scala 中使用实际对象与在 scala 中使用单例对象是否有任何特定规则,或者是否有经验法则可以遵循

说我有这样的课

class GetDataInput {
def getNameInput() {
println("Enter the name value: ")
}
def getTypeInput() {
println("Enter the type value: ")
}
def getBothInput() {
println("Enter the name value: ")
println("Enter the type value: ")
}
}

像这样的常规术语使用它会更好吗

val someval = new GetDataInput()
someval.getNameInput()

或者为这个类创建一个单例对象并使用它访问方法是否很好

object GetDataInput {
def getNameInp() = getNameInput()
}

对此有任何指示吗?

最佳答案

通常你在以下情况下创建一个object:

  • 拥有一个潜在类的不同实例绝对没有意义,例如,包含几个纯函数(如数学函数、工厂方法)

  • 您想编写等效于 java 的 static 方法或 static final 常量。 (请参阅伴随对象)。

  • 您想要一个更简单的枚举值替代方案(由 objectinstances 扩展的 sealed trait)。

在您的示例中,所有函数都是纯函数,并且类是无状态的。因此,所有实例都将严格相等。把它变成一个对象是有意义的:

object GetDataInput {
def getNameInput() {
println("Enter the name value: ")
}
...
}

如果您做出了错误的选择,请不要担心,重构很容易。通常,您可以保留对对象的所有现有调用,只需提取特征中的方法:

trait GetDataInput {
def getNameInput() {
println("Enter the name value: ")
}
}

object GetDataInput extends GetDataInput //Bring all traits methods into the object
// to keep previous behaviour

class MyGetDataInput( whatever: Foo ) extends GetDataInput {
...
}

关于scala - 何时使用单例对象以及何时在 scala 中使用实际对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com