显式null参数

时间:2015-03-31 20:38:47

标签: scala

我是scala的新手,最近我遇到了以下代码:

object Foo {
    implicit lazy val myGlobalExecutionContext: ExecutionContextExecutor =
    impl.ExecutionContextImpl.fromExecutor(null: Executor)
}

我检查了fromExecutor签名,就像这样

def fromExecutor(e: Executor): ExecutionContextExecutor

我的问题是我们为什么这样做:

impl.ExecutionContextImpl.fromExecutor(null: Executor)

而不仅仅是

impl.ExecutionContextImpl.fromExecutor(null)

为什么我们在调用方法时传递一种参数?

1 个答案:

答案 0 :(得分:6)

在这种情况下,我没有看到任何特定原因,但fromExecutor可能会超载,我们可能希望确保调用特定的重载。例如:

case class Bar(id: Int)
case object Baz

object Test {
    def fromBar(bar: Bar): Bar = bar
    def fromBar(baz: Baz): Bar = Bar(0)
}

如果我打电话:

scala> Test.fromBar(null)
<console>:20: error: ambiguous reference to overloaded definition,
both method fromBar in object Test of type (baz: Baz)Bar
and  method fromBar in object Test of type (bar: Bar)Bar
match argument types (Null)
              Test.fromBar(null)

我收到错误,因为调用不明确。 null可以是BarBaz。所以我必须使用类型转换或ascription来使用特定的重载:

 Test.fromBar(null: Bar)