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