【发布时间】:2019-07-10 12:07:48
【问题描述】:
- 我有一组模型类,这些模型的一个子集有两个属性,称为
createdBy和modifiedBy。 - 我只需要为具有这些属性的对象填充这些属性。目前我正在使用一些样板代码进行模式匹配。
case class DataSourceInstanceRow(id: Int, value: String, createdBy: Option[String], modifiedBy: Option[String])
case class FormDefinitionRow(id: Int, formData: String, createdBy: Option[String], modifiedBy: Option[String])
case class DecisionTableDefinitionRow(id: Int, rows: Int, definitions: List[String], createdBy: Option[String], modifiedBy: Option[String])
case class ReportDef(id: Int, reportType: Int, reportName: String)
def populateLogs[T](t: T, user: String): T = {
t match {
case ds: DataSourceInstanceRow =>
if(ds.id == -1) ds.copy(modifiedBy = Some(user), createdBy = Some(user)).asInstanceOf[T]
else ds.copy(modifiedBy = Some(user)).asInstanceOf[T]
case fd: FormDefinitionRow =>
if(fd.id == -1) fd.copy(modifiedBy = Some(user), createdBy = Some(user)).asInstanceOf[T]
else fd.copy(modifiedBy = Some(user)).asInstanceOf[T]
case dtd: DecisionTableDefinitionRow =>
if(dtd.id == -1) dtd.copy(modifiedBy = Some(user), createdBy = Some(user)).asInstanceOf[T]
else dtd.copy(modifiedBy = Some(user)).asInstanceOf[T]
case o => o
}
}
-
DataSourceInstanceRow、FormDefinitionRow、DecisiontableDefinitionRow具有modifiedBy和createdBy属性。但不是ReportDef
如何使用 shapeless 创建一个抽象来从上述模式匹配中删除样板?
【问题讨论】:
-
如果您尽量减少您的问题并提供一个可行的示例,您更有可能得到答案。
-
@TravisBrown 感谢您的建议。我只是简化了问题。请看一看。
标签: scala pattern-matching shapeless