Scala 特征可以复制它的子类吗?



我想做一个可以产生其子类副本的特质。子类保证是一个案例类,因此应该有一个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: _*)

这不适用于具有多个参数列表(包括隐式参数(的类或内部类。

最新更新