在下面的代码段中:
for {
strVal <- str
longVal <- str.strToLong
} yield longVal
其中str是Option [String]。如果str以some(null)的形式出现怎么办?如何理解我的理解?
答案 0 :(得分:1)
我认为您正在处理Some(null)
,因为您在代码中使用了该构造函数。
试试Option(variableWithNull)
,结果将是None
。然后None
的所有操作都会产生None
的结果,而不是烦人的java.lang.NullPointerException
。
也许您可以使用此代码:
val str: Option[String] = Option(null)
str.fold(0L) {_.toLong}
答案 1 :(得分:0)
Some(null)
应该是上游代码出错的指标。通常,当包装可能在Option
类型中返回null的内容时,应使用Option
apply,因为Option(null)
评估为None
。
如果您无法影响它,您可以flatMap
始终None
:
str.flatMap(Option(_))