scala - 将 null 传递给需要 Long 的方法

标签 scala scala-2.8

我有一个带有 2 个参数的 Scala 方法:

def test(x:Long,y:Int){}

在某些情况下,我需要传递 null 而不是 long ... 类似的东西:
test(null,x)

结果:

scala> test(null,2) :7: error: type mismatch; found : Null(null) required: Long test(null,2)



为什么我需要传递null?
实际上,出于某种原因,我无法传递任何默认值。
因此,我需要这样一个空值。

*注意:*我知道解决方案将使其成为选项。
但是,假设我无法控制此方法签名,我可以做任何工作吗?

有任何想法吗!

谢谢。

最佳答案

Null 是继承自 AnyRef 的类型的子类型,而不是继承自 AnyVal 的值类型。这就是您无法传入 null 的原因。这对应于在 Java 中,您不能拥有 long 类型的 null。 (忽略盒装 Long 类型)。

但是,这表明该方法的签名应更改为:

def test(x: Option[Long], y: Int)

这表明有时它对 x 没有值(value)。因为我们有这个很好的 Option 类来处理这个实例,所以使用空值几乎没有任何正当理由,你依赖于开发人员记住检查空值。相反,使用 Option 时,编译器会强制您处理该值可能不存在的事实。

关于scala - 将 null 传递给需要 Long 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637827/

相关文章:

scala - Spark BigQuery 连接器 : Writing ARRAY type causes exception: ""Invalid value for: ARRAY is not a valid value""

list - 如何删除子列表

scala - scalaz运算符的可发音名称?

scala - 给定某种路径相关类型的值,如何获取 "container"的实例?

scala - Scala actor 如何响应消息返回值?

scala - 函数处理 Array[T] 或 List[T] 或 Iterable[T] 的函数

swing - 有使用 'scala.swing'的好例子吗?

scala - 从 scala 2.8.1 到 scala 2.9.1 的主要变化是什么?

scala - 使用 Spark 高阶函数时如何返回案例类?

scala - 如何将凿子 dsptools 与浮子一起使用