Scala不可更改的地图

时间:2014-05-06 12:40:39

标签: scala map

在Scala 2.10.2中,我希望能够创建一个类似于Map的类,但不允许修改;即你可以查看它,但你无法修改它。

class NoModifyMap extends scala.collection.Map[String,Int] with scala.collection.MapLike[String,Int,scala.collection.Map[String,Int]]
{
    def get( key : String ) = ...

    def iterator = ...
}

然而,这迫使我实施{I}}和+方法,我不想要这些方法。我想这是因为-filter等需要它们,但是这个问题是否有明智的解决方法?

请注意,我不是要求不可变地图,但无法更改,但仍允许用户修改地图副本 - 我不会&# 39;不希望他们能够。

我意识到我可以使用自定义地图实现执行此操作,其中map+会抛出错误,但这是一种令人讨厌的代码味道。

1 个答案:

答案 0 :(得分:-1)

看看AbstractMap。那里你没有实现地图的所有方法(只有getiterator)。

class NoModifyMap extends scala.collection.AbstractMap[String,Int]
{
    def get( key : String ) = ...

    def iterator = ...
}

顺便说一句,如果Map将返回正确的值,则无法保护将此iterator的内容复制到其他地图中:新创建的地图只会迭代您map,复制它的值,因此结果与不可变映射相同。