相关疑难解决方法(0)

Java是"通过引用传递"还是"传递价值"?

我一直认为Java是传递引用的.

但是,我看过一些博客文章(例如,这个博客)声称它不是.

我不认为我理解他们所做的区别.

解释是什么?

java methods parameter-passing pass-by-reference pass-by-value

6270
推荐指数
80
解决办法
189万
查看次数

如何使Map <String,List <String>不可修改?

java.util.Collections类允许我做集合实例不可修改.以下方法

protected Map<String, List<String>> getCacheData() {
    return Collections.unmodifiableMap(tableColumnCache);
}
Run Code Online (Sandbox Code Playgroud)

返回一个umodifiable Map,因此UnsupportedOperationException尝试更改map实例会导致a.

@Test(expected = UnsupportedOperationException.class)
public void checkGetCacheData_Unmodifiable() {
    Map<String, List<String>> cacheData = cache.getCacheData();
    cacheData.remove("SomeItem");
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,所有List<String>孩子都不可修改.所以我想知道是否有办法强制实施儿童价值观的List<String>无法改变的行为?

当然,或者我可以迭代映射键值对,使列表不可修改并重新组合映射.

java collections unmodifiable map

5
推荐指数
1
解决办法
2149
查看次数

修改公共静态最终数组

在设计一个小API的时候,我正准备编写一个引用String数组的静态值: public static final String[] KEYS={"a","b","c"} 我发现在Joshua Bloch的"Effective Java"第14项中将其标记为"安全漏洞",他建议将其作为替代方案,声明te array'private'并提供返回不可修改列表的公共getter:

return Collections.unmodifiableList(Arrays.asList(KEYS))
Run Code Online (Sandbox Code Playgroud)

我只是不明白为什么这是必要的,初始语句中的数组被声明为final,即使它是公共的,它的元素是不可变的,如何从外部代码修改?

java arrays final

5
推荐指数
2
解决办法
844
查看次数