为什么在scala中创建地图不需要并允许新的运算符?

Luk*_*uke 1 scala new-operator

我们使用以下方法在scala中创建新地图:

val treasureMap = Map[Int, String]()
Run Code Online (Sandbox Code Playgroud)

但为什么在这里使用新的运营商是违法的?

val treasureMap = new Map[Int, String]()
Run Code Online (Sandbox Code Playgroud)

我认为new是用于创建新对象,在上面的示例中我创建了一个新对象.

sen*_*nia 5

Map是一个trait(就像一个界面java) - 这是一个没有实现的合同.

没有new你使用apply单身对象的工厂方法命名Map:

val treasureMap = Map.apply[Int, String]()
Run Code Online (Sandbox Code Playgroud)

scala你可以称之为一个apply通过将对象名称后的括号内的任何物体的方法:

val functionIncrement = (_: Int) + 1

functionIncrement(2)
// 3

functionIncrement.apply(2)
// 3

val treasureMap = Map.apply(1 -> "a")

treasureMap(1)
// a

treasureMap.apply(1)
// a
Run Code Online (Sandbox Code Playgroud)