是否可以在两个具有不同名称和scala中略有不同字段的案例类之间进行转换

时间:2017-07-06 03:40:12

标签: scala

例如,我有案例类

case class foo(timestamp:String, epochSecond: Long)

case class bar(epochSecond: Long, timestamp:String)

是否可以在这两个类的实例之间进行转换?

1 个答案:

答案 0 :(得分:1)

您的问题相当模糊,因为有很多方法可以实现这一目标。这是一个选择。

使用案例类的定义......

case class Foo(timestamp:String, epochSecond: Long)
case class Bar(epochSecond: Long, timestamp:String)

...添加辅助工厂方法。

object Foo {
  def apply(b: Bar): Foo = this(b.timestamp, b.epochSecond)
}
object Bar {
  def apply(f: Foo): Bar = this(f.epochSecond, f.timestamp)
}

现在,您可以非常简单地从一种类型转换到另一种类型。

val fooX = Foo("noon", 42L)
val barY = Bar(99L, "none")

val fooY = Foo(barY)  //fooY: Foo = Foo(none,99)
val barX = Bar(fooX)  //barX: Bar = Bar(42,noon)