Scala:使用不同类型的值转换几乎相同的案例类

时间:2019-09-18 07:17:34

标签: scala default-parameters

说我有一个案例类:

case class car1 (
  var wheels: Map[String, String] = Map[String, String](),
  var tire: String = "",
  var window: String = ""
) {}

我只是想将其实例转换为另一个case类,而一个变量wheels的类型只有一个差异,而所有其他值都相同:

case class car2 (
  var wheels: Array[(String, String)],
  var tire: String = "",
  var window: String = ""
) {}

Scala中最好的方法是: 1.将所有样板默认值抽象为一个结构 2.在两个类之间进行转换,以便转换可以更改wheels值的类型

我想将car1的实例转换为car2,以便将标准转换函数应用于滚轮。

2 个答案:

答案 0 :(得分:2)

2。尝试

case class car1 (
                  var wheels: Map[String, String] = Map[String, String](),
                  var tire  : String              = "",
                  var window: String              = ""
                ) {
  def toCar2: car2 = car2(wheels.toArray, tire, window)
}

1。尝试

def default[A](implicit factory: Factory[_, A]): A = factory.newBuilder.result()

case class car1 (
                  var wheels: Map[String, String] = default,
                  var tire  : String              = default,
                  var window: String              = default
                ) {
  def toCar2: car2 = car2(wheels.toArray, tire, window)
}

case class car2 (
                  var wheels: Array[(String, String)] = default,
                  var tire  : String                  = default,
                  var window: String                  = default
                ) {}

Scala 2.13。

答案 1 :(得分:2)

我会在apply的{​​{1}}中添加一个companion object函数:

car2

用法:

object car2 {
  def apply(car1: car1): car2 =
     car2(car1.wheels.toArray, car1.tire, car1.window)
}