我想在Scala中有一个具有可更新字段的单例对象。
有没有比我没有使用var
更好的解决方案?
class Foo {
def setFoo(newFoo: String): Unit = {
Foo.foo = newFoo
}
def getFoo: String = {
Foo.foo
}
}
object Foo {
var foo = "foo"
}
答案 0 :(得分:0)
如果您想要可变性(即变量不断更新),var
是您唯一的选择。
但是你可以用"不可变的方式编写它" ,其中set
意味着创建一个新的不可变实例:
class Foo(foo: String) {}
object Foo {
create(foo: String): Foo = new Foo(foo)
}
// ...
Foo foo = Foo.create("foo")
val bar = foo.foo // "foo"
答案 1 :(得分:0)
我会坚持你的原始实现,但保护你的可变单例到相关的类:
class Foo {
def setFoo(newFoo: String): Unit = {
Foo.foo = newFoo
}
def getFoo: String = {
Foo.foo
}
}
private [Foo] object Foo {
var foo = "foo"
}
答案 2 :(得分:0)
使用var
更好地解决您所拥有的问题可能只是
object Foo {
var foo = "foo"
}
就是这样,你不需要这个类和那些setter,编译器会为你生成它们。 现在你可以这样做:
Foo.foo = "bar"
或读取这样的值
Foo.foo
我没有看到在没有变量的情况下在对象中具有可变状态的方法。