Scala - 类型和实例化

时间:2017-01-07 09:05:58

标签: scala

scala> val a1 = scala.concurrent.Promise[Int]
a1: scala.concurrent.Promise[Int] = scala.concurrent.impl.Promise$DefaultPromise@10d59286

我无法理解如何在上面创建DefaultPromise的实例。可以理解的是,在下面的示例中,()调用了apply()并创建了DefaultPromise

scala> val a2 = scala.concurrent.Promise[Int]()
a2: scala.concurrent.Promise[Int] = scala.concurrent.impl.Promise$DefaultPromise@140e5a13

1 个答案:

答案 0 :(得分:3)

  

我无法理解如何在

之上创建DefaultPromise实例

由于您明确地将类型参数([Int])传递给调用(感谢@Jasper以进行说明),编译器会将调用视为您调用Promise.apply[Int](),因为object不能有类型参数。

我们可以看到这个探索代码。如果我们调用Promise[Int],编译器就会对话:

private[this] val res2: scala.concurrent.Promise[Int] = scala.concurrent.Promise.apply[Int]();

相反,如果我们不提供类型参数,我们会Promise.type

private[this] val res3: concurrent.Promise.type = scala.concurrent.Promise;