2017-12-02 374 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