我在Scala代码中调用了Java Double
类型,可以null
如何在Scala代码中检查null和非null值?
val myJavaDoubleValue: Double = thirdpartyCall.collectValue()
if(myJavaDoubleValue == null) {
println("Is NULL")
} else {
println("Is NOT NULL")
}
有任何关于以Scala方式执行此操作的建议吗?
答案 0 :(得分:8)
使用选项:
val myJavaDoubleValue: Option[Double] = Option(thirdpartyCall.collectValue())
如果结果为null,则上述结果为None
,否则为Some(actualValue)
。
答案 1 :(得分:4)
Scala以与Java相同的方式支持null
。所以你的代码在语法上是正确的。
然而,更现代的方法是确保您的代码几乎永远不会触及null
值。为了做到这一点,一种可能的方法是使用Scala Option
类。 Option[T]
是可以定义或不定义的值。已定义的选项由Some[T]
表示,而未定义的选项由None
表示。
Option(thirdpartyCall.collectValue())
将返回Option[Double]
。有多种方法可以检查Option
中包含的值,其中一种Scala惯用方法可以执行您想要执行的操作pattern matching:
Option(thirdpartyCall.collectValue()) match {
case Some(value) =>
println(s"value is defined: $value")
case None =>
println("value is not defined")
}
然而,Option
比那更强大。它支持map
,flatMap
和fold
等方法,让您更具表现力,例如:
def optionIsDefined[A](a: A) = Option(a).fold("not defined") { value => s"defined with value: $value" }
scala> optionIsDefined(42)
res2: String = defined with value: 42
scala> optionIsDefined(null)
res3: String = not defined
This是关于Option
的新手友好指南。