Why final is not applied for Map ? Prabhat Ranjan Ranch Hand Joined: Oct 04, 2006Posts: 374
posted 2010年11月16日 GMT+8下午8:00:19
Hi, Map hm= new HashMap(); hm.put("hash","test"); ok final Map hm= new HashMap(); hm.put("hash","test");// this should not allow here as Map i have declared as final. ko but Map hms = Collections.unmodifiable(hm) is working fine. Matthew Brown Bartender Joined: Apr 06, 2010Posts: 4115
4
I like...
posted 2010年11月16日 GMT+8下午8:02:20
Prabhat Ranjan wrote:final Map hm= new
HashMap();
hm.put("hash","test");// this should not allow here as Map i have declared as final.
But hm is still pointing at the same object. final means that the reference can't be altered, not the object itself. Paul Sturrock Bartender Joined: Apr 14, 2004Posts: 10336
I like...
posted 2010年11月16日 GMT+8下午8:09:12
hm.put("hash","test");// this should not allow here as Map i have declared as final. [
Final does not imply unmodifiable, unless the object is immutable. If you want an unmodifiable map have a look at the Collections class, or alternatively wrap the map in your own custom immutable class.
如果要实现HashMap不可被修改,即如果不可变类的成员变量是可变的(譬如HashMap),我们需要使用深拷贝(deep copy)或者克隆来防止成员变量被更改:
private
final
HashMap testMap;
……
……
……
/**
* 可变对象的访问方法
*/
public
HashMap getTestMap() {
//return testMap;
return
(HashMap) testMap.clone();
}
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。