繁体   English   中英

返回不可修改的地图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM