Scala - 使用来自其他2个案例类的所有字段创建案例类

时间:2017-04-20 14:54:29

标签: scala types type-conversion shapeless

假设我有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类的参数中的每个字段,以便每次更改BasicInfo时,我们还必须记住也要更改FullTwo

有没有办法在编译时动态创建一个等于FullTwo的案例类?

0 个答案:

没有答案