2016-09-27 44 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友好的嚮導。