将一个case类转换为另一个与Scala中的附加参数类似的case类
所以,问题在标题中,但这里是细节 我有两个案例课程:将一个case类转换为另一个与Scala中的附加参数类似的case类,scala,tuples,slick,Scala,Tuples,Slick,所以,问题在标题中,但这里是细节 我有两个案例课程: case class JourneyGroup(id: Option[Int] = None, key: UUID, name: String, data: Option[JsValue], accountId: Int,
case class JourneyGroup(id: Option[Int] = None,
key: UUID,
name: String,
data: Option[JsValue],
accountId: Int,
createdAt: DateTime = DateTime.now,
createdById: Int,
updatedAt: Option[DateTime] = None,
updatedById: Option[Int] = None,
deletedAt: Option[DateTime] = None,
deletedById: Option[Int] = None)
及
背景:拥有这两个独立类的原因是,slick不支持集合,我需要手动构建相关对象的集合。归根结底,我不能让它与一个班的工作
我需要的是一个简单的方法,从一个转换到另一个。
在这一点上,为了解除我自己的封锁,我创建了一个手动转换:
def toJourneyGroupApi(parties: Seq[Party]): JourneyGroupApi = JourneyGroupApi(
id = id,
key = key,
name = name,
data = data,
accountId = accountId,
createdAt = createdAt,
createdById = createdById,
updatedAt = updatedAt,
updatedById = updatedById,
deletedAt = deletedAt,
deletedById = deletedById,
parties = parties
)
这是工作,但非常丑陋,需要大量的维护
我试着做的一件事是:
shapeless
:+
的结果不是tuple,即使在控制台中:
Party.unapply(p.get)+Seq.empty[参与者]
res0:(Option[Int],model.Parties.Type.Value,Int,Int,org.joda.time.DateTime,Int,Option[org.joda.time.DateTime],Option[Int],Option[org.joda.time.DateTime],Option[Int],Seq[model.Participant])=(无,客户端,12323422016-11-12T03:55:24.006-08:00987,无,无,无,无,无,无,列表())
我做错了什么?也许还有另一种方法来实现这一点。 < P>你能考虑作文吗?< /P>
case class JourneyGroup(
...
)
case class JourneyGroupApi(
journeyGroup: JourneyGroup=JourneyGroup(),
parties: Seq[Party] = Seq()
)
转换journeyGroup
就像JourneyGroupApi(journeyGroup,parties)
一样,“转换”JourneyGroupApi
就是访问JourneyGroupApi.journeyGroup
的问题。你也许能想出对这个案子更有效的名字。不确定这种方法是否适合您的其余代码。特别是在journeyGroupApi中引用journeyGroup属性将是一个额外的级别,例如,journeyGroupApi.journeyGroup.accountId
。(这可能通过journeyGroupApi上的“快捷方式”定义来缓解,如lazy val accountId=journeyGroup.accountId
)
继承也可能是一个用一个基本案例类来考虑的一个方法,它是一个正常的类(不是case类),它以方作为额外的属性来扩展它。此选项将在本文中进一步讨论。
这是一个选项,但正如您所提到的,它不适合代码的其余部分。谢谢case class JourneyGroup(
...
)
case class JourneyGroupApi(
journeyGroup: JourneyGroup=JourneyGroup(),
parties: Seq[Party] = Seq()
)