case class A(a:Int, b:Int) {
def f(){println(a)}
}
val o1 = A(3,3)
val o2 = new A(o1.a,o1.b) {override def f(){println(b)}} //too long when there are a lot of parameters
这里我必须将o1参数传递给o2,但在现实生活中我有更多的参数。我知道我可以像这样复制案例对象
o2 = o1.copy
有没有办法将副本与重写方法结合起来?
答案 0 :(得分:1)
不确定是否有一种简单的方法可以将copy
与重写相结合。但是作为替代方案,您可以考虑重载案例类构造函数(以获取案例类对象),如下所示:
case class A(x: Int, y: String) {
def this(a : A) = this(a.x, a.y)
def f() { println(x)}
}
然后,您可以通过仅传递1个参数来创建A
个对象实例(具有覆盖):
val o1 = A(30, "Test")
val o2 = new A(o1) { override def f() { println(y)} }
显然,这并不能完全解决长参数问题,因为您在定义构造函数时仍需要列出它们。虽然如果你在具有不同行为的多个A
对象之后,那么每次指定完整列表应该是一个很大的改进。