如何在无形中创建生成的对象

富兰克林

假设我有一个通用类型的规范化数据库模型,如下所示:

case class BaseModel(id: String, 
                     createdBy: String,
                     attr1: Option[String] = None,
                     attr2: Option[Int] = None, 
                     attr3: Option[LocalDate] = None)

给定 的序列BaseModel,如果某个属性的所有字段Option都没有填充,shapeless 可以为我创建一个简化的模型吗?

例如,假设所有attr1字段都为空。如果我不必事先指定对象,可以无形地创建一个看起来像这样的通用对象吗?

case class BaseModel(id: String, 
                     createdBy: String,
                     attr2: Option[Int] = None, 
                     attr3: Option[LocalDate] = None)
米特罗·米廷

Shapeless 可以做的是,给定两个 case 类,从另一个对象创建其中一个的对象。

import java.time.LocalDate
import shapeless.LabelledGeneric
import shapeless.record._

case class BaseModel(id: String,
                     createdBy: String,
                     attr1: Option[String] = None,
                     attr2: Option[Int] = None,
                     attr3: Option[LocalDate] = None)

case class BaseModel1(id: String,
                      createdBy: String,
                      attr2: Option[Int] = None,
                      attr3: Option[LocalDate] = None)

val bm = BaseModel(
  id = "cff4545gvgf", 
  createdBy = "John Doe", 
  attr2 = Some(42), 
  attr3 = Some(LocalDate.parse("2018-11-03"))
)  // BaseModel(cff4545gvgf,John Doe,None,Some(42),Some(2018-11-03))
val hlist = LabelledGeneric[BaseModel].to(bm)
val hlist1 = hlist - 'attr1
val bm1 = LabelledGeneric[BaseModel1].from(hlist1)    
   // BaseModel1(cff4545gvgf,John Doe,Some(42),Some(2018-11-03))

但是 Shapeless 不能创建一个新的案例类。如果您需要自动创建一个新的案例类,您可以编写一个宏。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章