【发布时间】:2016-07-15 22:23:49
【问题描述】:
我有以下设置,我想将baseData 的实例复制到moreData 的实例中:
sealed trait baseData {
def weight: Int
def priority: Int
}
sealed trait moreData {
def weight: Int
def priority: Int
def t: String
def id: String
}
case class data1(override val weight: Int, override val priority: Int) extends baseData
case class moreData1 (override val weight:Int, override val priority: Int, override val t: String, override val id: String)extends moreData
所以将myData复制到下面的otherData中:
val myData = data1(1,1)
val otherData = moreData1 (2,2,"C","abcd")
将产生:moreData1(1,1,"C","abcd")。
为此,我想使用具有以下签名的函数,因为我将拥有多个扩展 baseData 和 moreData 的案例类:
def copyOver[A <:baseData, B <:moreData](from: A, to: B) = {}
我确定您可以使用 Shapeless 执行此操作,但还没有弄清楚如何操作。有一些例子 (here) 关于复制扩展相同特征的案例类,还有一些 (here) 通过泛型表示在不同案例类之间映射值。但我还没有想出如何使用LabelledGeneric 与传递给copyOver 的特征边界参数。我也不想硬编码otherData 中不存在于myData 中的额外字段。
我正在寻找一个完全通用的实现。有什么想法吗?
【问题讨论】: