Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回不可修改的映射_Java_Collections_Map_Unmodifiable - Fatal编程技术网

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);