Java Final关键字与HashMap_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java Final关键字与HashMap

Java Final关键字与HashMap

 2013/12/21 19:09:12  guiven  程序员俱乐部  我要评论(0)
  • 摘要:WhyfinalisnotappliedforMap?PrabhatRanjanRanchHandJoined:Oct04,2006Posts:374posted2010年11月16日GMT+8下午8:00:19Hi,Maphm=newHashMap();hm.put("hash","test");okfinalMaphm=newHashMap();hm.put("hash","test");//thisshouldnotallowhereasMapihavedeclaredasfinal
  • 标签:has Map Hash Java 关键字

?

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?purple mooseageclass="opaque" width="59px" src="/Upload/Images/2013122119/D8398D4460F6DBBF.gif"> Quote 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...
Java?Netbeans IDE?Scala posted?2010年11月16日 GMT+8下午8:02:20?purple mooseage Quote
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...
Eclipse IDE?Hibernate?Java posted?2010年11月16日 GMT+8下午8:09:12?purple mooseage Quote

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 testMap; ????????return (HashMap) testMap.clone(); ????}

?

上一篇: 简单说说.Net中的弱引用 下一篇: 没有下一篇了!
发表评论
用户名: 匿名