在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
和+
会抛出错误,但这是一种令人讨厌的代码味道。
答案 0 :(得分:-1)
看看AbstractMap。那里你没有实现地图的所有方法(只有get
和iterator
)。
class NoModifyMap extends scala.collection.AbstractMap[String,Int]
{
def get( key : String ) = ...
def iterator = ...
}
顺便说一句,如果Map
将返回正确的值,则无法保护将此iterator
的内容复制到其他地图中:新创建的地图只会迭代您map,复制它的值,因此结果与不可变映射相同。