Sof*_*fia 5 types scala type-conversion shapeless
假设我有2个案例类:
case class Basic(id: String, name) extends SomeBasicTrait
case class Info (age: Int, country: String, many other fields..) extends SomeInfoTrait
Run Code Online (Sandbox Code Playgroud)
并且想要创建一个包含这两个案例类中所有字段的案例类.这是一种可能的方式:
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
}
Run Code Online (Sandbox Code Playgroud)
但它是很多样板代码.有什么方法可以避免这种情况吗?
我无法在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))
Run Code Online (Sandbox Code Playgroud)
这个解决方案的问题在于它仍然需要在FullTwo类的参数中定义每个字段,这样每次更改Basic或者更改时Info,我们也必须记住也要更改FullTwo.
有没有办法在编译时动态创建一个等于FullTwo?的case类?
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |