检查Scala for Java数据类型

时间:2016-09-27 21:28:45

标签: scala

我在Scala代码中调用了Java Double类型,可以null如何在Scala代码中检查null和非null值?

val myJavaDoubleValue: Double = thirdpartyCall.collectValue()
if(myJavaDoubleValue == null) {
  println("Is NULL")
} else {
  println("Is NOT NULL")
}

有任何关于以Scala方式执行此操作的建议吗?

2 个答案:

答案 0 :(得分:8)

使用选项:

val myJavaDoubleValue: Option[Double] = Option(thirdpartyCall.collectValue())

如果结果为null,则上述结果为None,否则为Some(actualValue)

请参阅Option.apply()

答案 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比那更强大。它支持mapflatMapfold等方法,让您更具表现力,例如:

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的新手友好指南。