2017-12-02 207 views
0

null`我有一個元組的Scala是:檢查階元組包含`在Java中

val myTuple: (Int, Int) = (null.asInstanceOf[Int], 1) 

,我從Java訪問。問題是在Java中,myTuple._1()返回0而不是null,正如我解釋的here。相反,myTuple._1將返回始終爲空,無論設置的值如何。因此,我不知道如何檢查哪一個是真正的價值:我如何檢查它是否是null0或任何其他值?

謝謝。

回答

1

問題是在Java世界null不是int類型的有效值。在斯卡拉世界裏,事情是非常相似的。如果你只是運行

println(null.asInstanceOf[Int]) 

你會得到

作爲輸出。此行爲在Scala規範的6.3 The Null Value部分中指定。

因此,您不能在int中測試null,因爲它不能在那裏。在Java世界中,對此的解決方法是java.lang.Integer類,該類是int的不可變對象封裝,並且支持Autoboxing and Unboxing。所以,你可以嘗試指定您的元組作爲

val myTuple: (Integer, Integer) = (null, 1) 

然而,在斯卡拉世界有更好的替代 - scala.Option。並且自Java 8以來也有類似的java.util.Optional。所以,你可能真正想要的是像

val myScalaTuple: (Option[Int], Option[Int]) = (None, Some(1)) 
val myJavaTuple: (Optional[Int], Optional[Int]) = (Optional.empty[Int](), Optional.of(1)) 
+0

感謝,我知道哪些是替代品,但由於這個元組可能會爲我輸入,我不能改變它是如何。但不幸的是,你證實了我的感受,即。沒有解決這個問題的辦法。 – mgaido

+0

@mgaido,如果這是一個輸入,你爲什麼要檢查'null',不能在那裏呢? – SergGr

+0

它可以是,因爲輸入來自用戶編寫的scala代碼,並且用戶可以像我給你展示的那樣寫一個元組。 – mgaido