大多数时间默认值非常合适,但在某些情况下我想检查它们是否已手动设置。
实施例
//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
)
我应该修复转换器,但由于默认值的使用,我不知道这个。有没有办法在不使用默认值的情况下创建对象(并产生编译时错误)?
答案 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()
定义中)。