我有一个带有 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/