我想知道在 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
常量。 (请参阅伴随对象)。您想要一个更简单的枚举值替代方案(由
object
instances 扩展的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/