假设我有2个案例类:
case class Basic(id: String, name) extends SomeBasicTrait
case class Info (age: Int, country: String, many other fields..) extends SomeInfoTrait
并且想要创建一个包含这两个案例类中所有字段的案例类。这是一种可能的方式:
case class Full(bs: Basic, meta: Info) extends SomeBasicTrait with SomeInfoTrait {
val id = bs.id
val name = bs.name
val age = meta.age
val country = meta.country
// etc
}
但它是很多样板代码。有什么方法可以避免这种情况吗?
我无法在Shapeless中找到实现这一目标的方法,但也许有......
[更新
@jamborta的评论有帮助,基本上就是这样:
case class FullTwo(id: String, name: String, age:Int, country:String)
val b = Basic("myid", "byname")
val i = Info(12, "PT")
Generic[FullTwo].from(Generic[Basic].to(b) ++ Generic[Info].to(i))
此解决方案的问题在于它仍然需要定义FullTwo
类的参数中的每个字段,以便每次更改Basic
或Info
时,我们还必须记住也要更改FullTwo
。
有没有办法在编译时动态创建一个等于FullTwo
的案例类?