我什么时候应该使用" new"在斯卡拉?

时间:2015-03-17 11:23:06

标签: scala dictionary collections scala-collections arraybuffer

当我使用ArrayBuffer时,我应该使用:

val arr = new ArrayBuffer[Int]

但是当我使用Map时,我应该使用:

val map = Map[Int, Int]()

1 个答案:

答案 0 :(得分:4)

要了解您需要使用Map[T, T]()而不是new Map[T, T](...)的原因,您需要了解随播对象的apply方法是如何工作的。

伴侣对象是与其同名的对象。通常,此对象包含您需要创建(轻松)类对象的工厂方法和其他方法。

为了确保不需要经过大量冗长的代码,Scala使用了apply方法,该方法在调用对象时直接执行,就像调用函数一样。

因此,Map的伴随对象必须如下所示:

object Map {
  def apply[K, V](...) = new Map[K,V](...) // Or something like this
}

虽然课程类似于

protected class Map[K, V](...) {
  ...
}

现在调用Map[String, String](...)实际上是在调用Map伴随对象的apply方法。

ArrayBuffer,这里没有伴侣对象。因此,您需要直接使用构造函数自己创建类的新实例。