在Scala中何时应该使用"new"?
- 论坛
- 在Scala中何时应该使用"new"?
10 浏览
在Scala中何时应该使用"new"?
当我使用ArrayBuffer时,我应该使用:
val arr = new ArrayBuffer[Int]
,但是当我使用Map时,我应该使用:
val map = Map[Int, Int]()
。
admin 更改状态以发布 2023年5月21日
匿名的
0 Comments
为了理解为何需要使用 Map[T, T]()
而不是 new Map[T, T](...)
,你需要先了解伴生对象上的 apply 方法如何工作。\n\n伴生对象是与类名相同的对象,其通常包含工厂方法和其他能够轻松创建该类的对象的方法。\n\nScala 使用 apply 方法来确保不需要编写冗长的代码。当你像调用函数一样调用对象时,将直接执行该方法。\n\n因此 Map
的伴生对象必须看起来像这样:\n\n
object Map { def apply[K, V](...) = new Map[K,V](...) // Or something like this }
\n\n类如下:\n\n
protected class Map[K, V](...) { ... }
\n\n现在调用 Map[String, String](...)
实际上是调用了 Map 伴生对象的 apply 方法。\n\n但是,ArrayBuffer
没有伴生对象。因此,你需要直接使用构造函数来创建该类的新实例。