如何检查所有对象的默认值字段是否已设置?

时间:2014-07-04 11:58:48

标签: scala default-value case-class

大多数时间默认值非常合适,但在某些情况下我想检查它们是否已手动设置。

实施例

//most fields with default value
case class Person(
  name: Option[String] = None,
  name2: Option[String] = None,
  bithYear: Option[Int] = None      
)


object OtherPersonToPersonConverter {
  def convert(other: OtherPerson): Person = {
    Person(
      name = other.name,
      name2 = other.name2,
      bithYear = other.bithYear 
    )
  }

然后我添加了另一个默认值为

的字段
case class Person(
  name: Option[String] = None,
  name2: Option[String] = None,
  bithYear: Option[Int] = None,
  city: Option[String] = None
)

我应该修复转换器,但由于默认值的使用,我不知道这个。有没有办法在不使用默认值的情况下创建对象(并产生编译时错误)?

2 个答案:

答案 0 :(得分:1)

如何:

case class Person(
  name: Option[String] = None,
  name2: Option[String] = None,
  bithYear: Option[Int] = None,
  city: Option[String]
)

答案 1 :(得分:0)

您可以根据需要创建任意数量的构造函数。放置它们的好地方是伴侣对象:

object Person {
  def create(name: Option[String], name2: Option[String], ...): Person = Person(
    name = name,
    name2 = name2,
    ...
  )
}

构造函数Person(...)等同于Person.apply(...),即调用伴随对象的apply()方法,因此您只需通过定义{{1}来创建另一个方法(或者你想要命名的任何东西)。通过创建多个构造函数,一个具有默认值,一个不具有默认值,您可以通过选择调用的方法来控制在创建Person.create()实例时是否使用默认值。

如果它对您更有效,您可以使Person成为具有默认参数的参数,而不是为create()定义默认参数(即在apply()定义中)。