我想创建一个可以生成其子类副本的特征。子类保证是一个case类,所以应该有一个copy
方法。我在这里做错了什么?
trait Copyable[C <: Copyable[C] with Product] {
def specialCopy: C =
this.asInstanceOf[C].copy() // doesn't compile
}
答案 0 :(得分:4)
子类保证是案例类
不,不是。 Product
可以由非案例类实现。
即使是这样,不同案例类的copy
方法是具有不同签名的不同方法,也没有单一的copy
方法可以调用。
虽然您可以 使用反射和specialCopy
来实现productIterator
。大约:
def specialCopy = getClass.getConstructors()(0).newInstance(this.asInstanceOf[Product].productIterator.asInstanceOf[Iterator[Object]].toSeq: _*)
这对于具有多个参数列表(包括隐式参数)或内部类的类不起作用。