Java 返回不可修改的映射
使用,我试图返回地图的不可修改视图。假设我有下面的方法Java 返回不可修改的映射,java,collections,map,unmodifiable,Java,Collections,Map,Unmodifiable,使用,我试图返回地图的不可修改视图。假设我有下面的方法 public final Map<Foo, Bar> getMap(){ ... return Collections.unmodifiableMap(map); } public final Map getMap(){ ... 返回集合。不可修改映射(map); } 为什么在其他地方这样做是合法的 Map<Foo, Bar> map = getMap(); map.put(...); Map-
public final Map<Foo, Bar> getMap(){
...
return Collections.unmodifiableMap(map);
}
public final Map getMap(){
...
返回集合。不可修改映射(map);
}
为什么在其他地方这样做是合法的
Map<Foo, Bar> map = getMap();
map.put(...);
Map-Map=getMap();
地图。放置(…);
这可不像我想的那样扔了个球。有人能解释一下,或者建议我如何成功返回一个真正不可修改的映射吗?你确定你没有以某种方式掩盖你的异常吗?这工作非常好,因为它抛出了
不支持的操作异常
:
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);
}
}
import java.util.*;
公开课考试{
公共静态void main(字符串[]args){
Map Map=getMap();
地图放置(“a”、“b”);
}
公共静态最终映射getMap(){
Map Map=newhashmap();
地图放置(“x”、“y”);
返回集合。不可修改映射(map);
}
}
我建议您在方法的返回值上打印出
map.getClass()
——我希望它是一个UnmodifiableMap
我创建了一个小测试程序,当我尝试将数据放入时,我的程序抛出了一个“UnsupportedOperationException”
代码:
import java.util.*;
公共类TestUnmodifiableMap
{
地图我的地图;
公共TestUnmodifiableMap()
{
myMap=newhashmap();
}
公共最终映射getMap()
{
返回集合。不可修改映射(myMap);
}
公共静态void main(字符串[]args)
{
TestUnmodifiableMap t=新的TestUnmodifiableMap();
Map testMap=t.getMap();
put(新的整数(“1”),“Hello”);
}
}
你在班上还做什么?一定是出了什么问题。在将某个对象包装为不可修改的映射后,您无法
将其放入该映射中
我还建议你回来
return Collections.<Foo, Bar>unmodifiableMap(map);
返回集合。不可修改映射(map);
否则,在使用-Xlint:unchecked编译代码时,您将收到“unchecked”警告。您可以发布更多代码吗?很难相信…@Jon,我不知道UnsupportedOperationException
是一个运行时错误。我假设这是一个编译时错误。这是我的错,但是你的回答让我意识到这个问题是多么愚蠢。非常感谢。
return Collections.<Foo, Bar>unmodifiableMap(map);