2016-09-27 16 views
0

我在Scala代码中调用Java Double类型,它可以是null我该如何检查Scala代码中的空值和非空值?在Scala for Java数据类型中检查空值

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

在斯卡拉方式做这个的任何建议?

回答

6

使用选项:

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

以上将导致None如果结果为空,否则Some(actualValue)

Option.apply()

3

Scala的支持一样的Java null。所以你的代码是合理正确的。

但是,更现代的方法是确保您的代码几乎永远不会触及null值。为了做到这一点,一种可能的方式是使用Scala Option类。 Option[T]是一个值,可以或不可以定义。已定义的选项由Some[T]表示,而未定义的选项由None表示。

Option(thirdpartyCall.collectValue())将返回Option[Double]。有多种方法来检查包含在Option的价值,斯卡拉,惯用的方式之一来执行你想要做的是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友好的向导。