返回不可修改的地图

mre*_*mre 17 java collections unmodifiable map

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

public final Map<Foo, Bar> getMap(){
    ...
    return Collections.unmodifiableMap(map);
}
Run Code Online (Sandbox Code Playgroud)

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

Map<Foo, Bar> map = getMap();
map.put(...);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 32

你确定你不是以某种方式屏蔽你的例外吗?这非常好,因为它抛出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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • @Jon,我不知道`UnsupportedOperationException`是一个运行时错误.我原以为这是一个编译时错误.这是我的错,但是你的回答让我意识到这个问题到底有多愚蠢.谢谢! (7认同)