我有一个案例类:
case class EvaluateAddress(addressFormat: String,
screeningAddressType: String,
value: Option[String]) {
}
这个工作正常,直到我有一个新的用例,其中“value”参数可以是类Object而不是String。
我处理此用例的初始实现:
case class EvaluateAddress(addressFormat: String,
screeningAddressType: String,
addressId: Option[String],
addressValue: Option[MailingAddress]) {
@JsonProperty("value")
def setAddressId(addressId: String): Unit = {
val this.`addressId` = Option(addressId)
}
def this(addressFormat: String, screeningAddressType: String, addressId: String) = {
this(addressFormat, screeningAddressType, Option(addressId), None)
}
def this(addressFormat: String, screeningAddressType: String, address: MailingAddress) = {
this(addressFormat, screeningAddressType, None, Option(address))
}
}
但我觉得这不是一个好方法,可能会在将来产生一些问题。
我可以通过哪些不同方式实现同样的目标?
编辑:有没有办法可以创建一个包含三个参数的类:** addressFormat,screeningAddressType,value **并处理这两个用例?
答案 0 :(得分:3)
您可以为案例类中的字段设置默认值。
因此,您可以将可选字段默认为None
:
case class EvaluateAddress(addressFormat: String,
screeningAddressType: String,
addressId: Option[String] = None,
addressValue: Option[MailingAddress] = None)
然后,当您创建EvaluateAddress
的新实例时,您可以选择传递addressId
或addressValue
或两者的值。或者根本不传递任何内容。
答案 1 :(得分:3)
您不需要在这里提供辅助构造函数,也不需要提供setter。您可以简单地使用案例类提供的复制方法。
例如:
case class MailingAddress(email:String)
case class EvaluateAddress(addressFormat: String,
screeningAddressType: String,
addressId: Option[String],
addressValue: Option[MailingAddress])
scala> val y = EvaluateAddress("abc", "abc", None, None)
y: EvaluateAddress = EvaluateAddress(abc,abc,None,None)
scala> y.copy(addressId = Some("addressId"))
res0: EvaluateAddress = EvaluateAddress(abc,abc,Some(addressId),None)