java - 检查Java中的scala Tuple是否包含 `null`

标签 java scala null tuples

我有一个 Scala 元组:

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

我正在从 Java 访问。问题在于,在 Java 中,myTuple._1() 返回 0 而不是 null,正如我所解释的 heremyTuple._1 相反,无论设置的值如何,始终返回 null。因此我不知道如何检查哪个是真正的值:如何检查它是否为 null0 或任何其他值?

谢谢。

最佳答案

问题在于,在 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/

相关文章:

java - iText pdf 在使用 NOTO 字体或 Source Hans 时不显示汉字

scala - 如何在spark中将rdd对象转换为dataframe

scala - 为 2.10 和 2.11 交叉构建 scala-reflect

java - 如何将@CheckForNull 等与Findbugs 一起使用?

c# - 无法将类型为 'System.DBNull' 的对象转换为类型 'System.String`

C++:将 C 函数的返回值与 NULL 或 nullptr 进行比较?

java - Stream.forEach() 是否总是并行工作?

java - 如何使用 java 设置 keystore 的加密服务提供程序

linux - 如何使用 sbt-native-packager 将参数传递给覆盖的脚本?

java - 如何创建持久的 Android 服务