我有一个 Scala 元组:
val myTuple: (Int, Int) = (null.asInstanceOf[Int], 1)
我正在从 Java 访问。问题在于,在 Java 中,myTuple._1()
返回 0
而不是 null
,正如我所解释的 here 。 myTuple._1
相反,无论设置的值如何,始终返回 null。因此我不知道如何检查哪个是真正的值:如何检查它是否为 null
、0
或任何其他值?
谢谢。
最佳答案
问题在于,在 Java 世界中 null
不是 int
类型的有效值。在 Scala 世界中,情况非常相似。如果你只是运行
println(null.asInstanceOf[Int])
你会得到
0
作为你的输出。此行为在 6.3 The Null Value 部分中指定。 Scala 规范。
因此,您无法在 int
中测试 null
,因为它不存在。在 Java 世界中,解决方法是 java.lang.Integer
类是 int
上的不可变对象(immutable对象)包装器,并支持 Autoboxing and Unboxing 。所以你可以尝试将你的元组指定为
val myTuple: (Integer, Integer) = (null, 1)
然而,在 Scala 世界中,有一个更好的替代品 - 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))
关于java - 检查Java中的scala Tuple是否包含 `null`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47612943/