java之域訪問器的Effective設定

來源:互聯網
上載者:User

在做封裝的時候,需要擷取或設定執行個體域的值,應該提供下面三項內容:

1.一個私人的資料域

2.一個公有的域訪問器方法

3.一個公有的域更改器方法

 

Java核心編程對於封裝提到過這樣一處改進:

對於只返回執行個體域值的公有的域訪問器,如:

public Date getGatherDate()<br /> {<br /> return gatherDate;<br /> }

提出:不要編寫返回引用可變對象的訪問器方法,因為這樣會破壞封裝。

如:

 

Employee harry = ...;</p><p>Date d = harry.getHireDay();</p><p>double tyms = 10*2345*4567*4568;</p><p>d.setTime(d.getTime()-(long)tyms);<br />

出錯的原因很微妙,但是確刻骨銘心!因為d和harry.hireDay引用了同一個對象,實際上我們返回這個可變對象的引用,需要的是放在另一個位置的對象副本,而不是原對象的引用!這時候對原對象做一個複製(clone)就OK。

public Date getGatherDate()<br /> {<br /> return (Date)gatherDate.clone();<br /> }

PS:返回一個可變資料域的拷貝,就應該使用複製。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.