假设我有一个特点定义了一些抽象的价值领域:如何复制实例和覆盖值字段特质宣布
trait Base {
val toBeOverride: String
}
case class Impl(other:Int) extends Base {
override val toBeOverride = "some value"
}
我如何编写一个函数,我可以很容易地得到一个克隆的实例只重写toBeOverride
的值如下:
// copy only available to case class instance
// v does not have method 'copy'
def overrideBaseValue[T <: Base](v: Base) =
v.copy(toBeOverride = "prefix" + v.toBeOverride)
?
编辑
@ SOM-snytt,我不认为这是一个重复,就像一个Trait
是不一样的一个Abstract Class
。这个问题的答案不满足我,见下文。
@布莱索尔,是的,这是一个问题。对于每个子案例类的实例,toBeOverride
字段是相同的,所以它不应出现在构造函数中。
现在所有的建议都是在每个(!)子例子类中定义一个自定义的copy
方法,在我看来这是丑陋的,并且显示出语言的不可用性。
你需要案例类吗?你可以使用toBeOverride方法重新创建一个基本特征的新实例吗?像这样:'def overrideBaseValue(v:Base)= new Base {def toBeOverride =“prefix”+ v.toBeOverride}' – rjsvaljean
http://stackoverflow.com/questions/12370244/case-class-copy-method- with-superclass –
@rjsvaljean,是的,当我说“复制”时,我想保留case类实例的所有其他字段,例如示例中的“other”。 – xiefei