Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查scala元组在Java中是否包含null_Java_Scala_Null_Tuples - Fatal编程技术网

检查scala元组在Java中是否包含null

检查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世界中,情况非常相似。如

我有一个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
,是吗?