我尝试了什么:
object LolTest {
trait Foo {
def foo: Int // getter
def foo(i: Int): Foo // setter
}
trait Bar {
def bar: String // getter
def bar(s: String): Bar // setter
}
case class Buzz(foo: Int, bar: String) extends Foo with Bar {
override def foo(i: Int): Buzz = copy(foo = i)
override def bar(s: String): Buzz = copy(bar = s)
}
}
但我真正的班级应该有很多领域(大约10个)。并且必须在具体类中实现setter(updaters,transformers?)而不是traits看起来......错了。而且我在尝试为班级添加不同的设置器时遇到越来越多的问题。
我很欣赏这个问题的建议。
答案 0 :(得分:1)
您可能不希望为您的案例类实现“setter”。我会这样做:
scala> case class A(a: Int, b: String = "hi", c: Boolean = false)
defined class A
scala> A(1)
res0: A = A(1,hi,false)
scala> A(1, "bye")
res1: A = A(1,bye,false)
scala> A(1, "bye", true)
res2: A = A(1,bye,true)
scala> res2.copy(b = "actually hi")
res3: A = A(1,actually hi,true)
在此示例中,a
是必需的。如果您想要一个可以构建A
仅指定b
的示例,请在案例类定义中为a
提供默认值:
scala> case class A(a: Int = 1, b: String = "hi", c: Boolean = false)
defined class A
scala> A(b = "only change the middle")
res9: A = A(1,only change the middle,false)