我想在闭合范围内将可变映射转换为不可变映射。以下是示例代码和无意义的防御性拷贝:
def func(): immutable.Map[String, Int] = {
val map = mutable.HashMap[String, Int]
// here goes operations for the map
return immutable.HashMap ++ map
}
我曾经写过“无意义”的代码,这里进行防御性拷贝是完全浪费时间的,因为可变映射实际上在外部是不可变的。如果我们只能让外部看到 getter 操作,那么性能应该会更好。
问题在于我真的不知道如何做到。我尝试简单地用匿名不可变映射实例包装它,但 def +[B1 >: B](kv: (A, B1))
方法使其不可能。
请帮帮我!
编辑:只是忘记将返回类型[Int, Int]
更正为 [String, Int]
immutable.Map
实际上是不可变的(除非使用反射,如上所述);collection.Map
可以是可变或不可变的(但即使它是可变的,您也无法访问变异方法,除非将其强制转换)。 - Alexey Romanov