?
Why final is not applied for Map ?
Prabhat Ranjan?
Ranch Hand?
Joined: Oct 04, 2006
Posts: 374?
posted?
2010年11月16日 GMT+8下午8:00:19?
![You must login or register purple mooseage]()
class="opaque" width="59px" src="/Upload/Images/2013122119/D8398D4460F6DBBF.gif">

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, 2010
Posts: 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, 2004
Posts: 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)或者克隆来防止成员变量被更改:
monospace !important;" class="java spaces">????
private
final
HashMap testMap;
?
……
……
……
?
????
/**
?????
* 可变对象的访问方法
?????
*/
????
public
HashMap getTestMap() {
????????
????????
return
(HashMap) testMap.clone();
????
}
?