返回不可修改的地图

使用Collections.unmodifiableMap(...) ,我试图返回一个不可修改的地图视图。 假设我有以下方法,

 public final Map getMap(){ ... return Collections.unmodifiableMap(map); } 

为什么在其他地方执行以下操作是合法的,

 Map map = getMap(); map.put(...); 

这不会像我想的那样抛出UnsupportedOperationException 。 有人可以解释一下,或者建议我如何成功地返回真正无法修改的地图?

你确定你不是以某种方式屏蔽你的例外吗? 这非常正常,因为它抛出UnsupportedOperationException

 import java.util.*; public class Test { public static void main(String[] args) { Map map = getMap(); map.put("a", "b"); } public static final Map getMap(){ Map map = new HashMap(); map.put("x", "y"); return Collections.unmodifiableMap(map); } } 

我建议你在方法的返回值上打印出map.getClass() – 我希望它是一个UnmodifiableMap

我创建了一个小测试程序,当我尝试将数据放入时,我的程序抛出了’UnsupportedOperationException’。

码:

 import java.util.*; public class TestUnmodifiableMap { Map myMap; public TestUnmodifiableMap() { myMap = new HashMap(); } public final Map getMap() { return Collections.unmodifiableMap(myMap); } public static void main(String[] args) { TestUnmodifiableMap t = new TestUnmodifiableMap(); Map testMap = t.getMap(); testMap.put(new Integer("1"), "Hello"); } } 

你class上还在做什么?

一定有别的错误。 在将其包装为不可修改的地图后,您无法在该地图中put某些内容。

我也建议回来

 return Collections.unmodifiableMap(map); 

否则,在使用-Xlint编译代码时,您将收到“未选中”警告:未选中。