我有一个功能
def withEnrichment[T](f: (AccountEnrichment) => Option[T] Or ErrorMessage) =
(Option(xa.getEnrichment) match {
case None => Good(None)
case Some(e: AccountEnrichment) => f(e)
case _ => Bad("not an AccountEnrichment")})
badMap {"enrichment: " + _}
我需要添加一个警卫,以便忽略某种类型的帐户。
case Some(g: AccountEnrichment)
if (g.getAccount != null && g.getAccount.getId == "BADACCOUNT")
=> Bad("account: id cannot be BADACCOUNT")
这是有效的,但是我想在不使用null关键字的情况下这样做。 g.getAccount来自Java库,可以并且将为null。
答案 0 :(得分:1)
当在null上应用Option时,它返回None。
scala> Option(null)
res0: Option[Null] = None
可以在代码中使用Option
的此属性代替null比较。
case Some(g: AccountEnrichment)
if (Option(g.getAccount).isEmpty && g.getAccount.getId == "BADACCOUNT")
=> Bad("account: id cannot be BADACCOUNT")
答案 1 :(得分:1)
如果您已经拥有case
,我认为您不需要额外case Some(e: AccountEnrichment) => f(e)
警卫。您可以将其修改为:
case Some(e: AccountEnrichment) => Option(e.getAccount)
.filterNot(_.getId == "BADACCOUNT")
.map(_ => f(e))
.getOrElse(Bad("account: id cannot be BADACCOUNT"))