[英]Returning an unmodifiable map
使用Collections.unmodifiableMap(...)
,我试图返回一个不可修改的地图视图。 假设我有以下方法,
public final Map<Foo, Bar> getMap(){
...
return Collections.unmodifiableMap(map);
}
为什么在其他地方合法执行以下操作,
Map<Foo, Bar> map = getMap();
map.put(...);
这不会像我想的那样抛出UnsupportedOperationException
。 有人可以解释一下,或者建议我如何成功地返回真正无法修改的地图?
你确定你不是以某种方式屏蔽你的例外吗? 这非常正常,因为它抛出UnsupportedOperationException
:
import java.util.*;
public class Test {
public static void main(String[] args) {
Map<String, String> map = getMap();
map.put("a", "b");
}
public static final Map<String, String> getMap(){
Map<String, String> map = new HashMap<String, String>();
map.put("x", "y");
return Collections.unmodifiableMap(map);
}
}
我建议你在方法的返回值上打印出map.getClass()
- 我希望它是一个UnmodifiableMap
。
我创建了一个小测试程序,当我尝试将数据放入时,我的程序抛出了'UnsupportedOperationException'。
码:
import java.util.*;
public class TestUnmodifiableMap
{
Map<Integer, String> myMap;
public TestUnmodifiableMap()
{
myMap = new HashMap<Integer, String>();
}
public final Map<Integer, String> getMap()
{
return Collections.unmodifiableMap(myMap);
}
public static void main(String[] args)
{
TestUnmodifiableMap t = new TestUnmodifiableMap();
Map<Integer, String> testMap = t.getMap();
testMap.put(new Integer("1"), "Hello");
}
}
你在课堂上还做了什么?
一定有别的错误。 在将其包装为不可修改的地图后,您无法在该地图中put
某些内容。
我还建议你回来
return Collections.<Foo, Bar>unmodifiableMap(map);
否则,在使用-Xlint编译代码时,您将收到“未选中”警告:未选中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.