检查scala元组在Java中是否包含null
我有一个Scala元组,它是:检查scala元组在Java中是否包含null,java,scala,null,tuples,Java,Scala,Null,Tuples,我有一个Scala元组,它是: val myTuple: (Int, Int) = (null.asInstanceOf[Int], 1) 我正在从Java访问。问题是在Java中,myTuple.\u 1()返回0,而不是null,正如我所解释的那样myTuple.\u 1相反,无论设置的值如何,都会返回始终为null。因此,我不知道如何检查哪个是真实值:如何检查它是null、0还是任何其他值 谢谢。问题是在Java世界中,null不是int类型的有效值。在Scala世界中,情况非常相似。如
val myTuple: (Int, Int) = (null.asInstanceOf[Int], 1)
我正在从Java访问。问题是在Java中,myTuple.\u 1()
返回0
,而不是null
,正如我所解释的那样myTuple.\u 1
相反,无论设置的值如何,都会返回始终为null。因此,我不知道如何检查哪个是真实值:如何检查它是null
、0
还是任何其他值
谢谢。问题是在Java世界中,
null
不是int
类型的有效值。在Scala世界中,情况非常相似。如果你只是跑
println(null.asInstanceOf[Int])
你会得到
0
作为您的输出。此行为在Scala规范的一节中指定
因此,您不能在int
中测试null
,因为它根本不存在。在Java世界中,这个类的解决方法是类,它是int
上的不可变对象包装器,并且支持。因此,您可以尝试将元组指定为
val myTuple: (Integer, Integer) = (null, 1)
然而,在Scala的世界里,有一个更好的替代品——Scala.Option
。由于Java8,也有类似的功能。所以你真正想要的是
val myScalaTuple: (Option[Int], Option[Int]) = (None, Some(1))
val myJavaTuple: (Optional[Int], Optional[Int]) = (Optional.empty[Int](), Optional.of(1))
谢谢,我知道哪些是可选的,但是因为这个元组可能是我的输入,所以我不能改变它的方式。但不幸的是,你证实了我的感觉,即,这个问题没有解决方案。@mgaido,如果这是一个输入,为什么要检查
null
,它无论如何都不在那里?它可以在那里,因为输入来自用户编写的scala代码,用户可以编写一个像我向您展示的元组。@mgaido,你似乎没有抓住要点。即使在Scala中,Int
类型中也不可能有null
。如我的示例所示,它被转换为0
。因此,即使是Scala,您也无法区分(0,1)
和(null.asInstanceOf[Int],1)
。如果您需要一个可以容纳整个Int
范围和null
的类型,您必须选择其他路径。它仍然不能。当然,用户可以写入null.asInstanceOf[Int]
,但其计算结果与写入1-1
的结果相同。您不会问如何检查元组是否包含0
或1-1
,是吗?