Effective Java(3rd)-Item16 在public類中使用訪問(wèn)方法而不是用public字段

??有時(shí),你可能會(huì)嘗試編寫(xiě)簡(jiǎn)單類,除了組實(shí)例字段之外沒(méi)有任何目的:


image.png

??因?yàn)檫@些類的數(shù)據(jù)字段是可以直接訪問(wèn)的施敢,所以這些類沒(méi)有提供封裝的好處(item15) 。你不能在不更改API的情況下更改表示狭莱,你不能強(qiáng)制不變量僵娃,你不能在訪問(wèn)字段的時(shí)候執(zhí)行輔助操作。強(qiáng)硬的面向?qū)ο蟪绦騿T認(rèn)為這些類是詛咒腋妙,應(yīng)該總是具有private字段和public訪問(wèn)方法(getters)和可變類的方法(setter):

image.png

??當(dāng)然默怨,強(qiáng)硬派是正確的,當(dāng)類是public的時(shí)候:如果一個(gè)類在包歪是可訪問(wèn)的骤素,提供訪問(wèn)方法保持改變類內(nèi)在表示的靈活性先壕。如果一個(gè)public類暴露它的數(shù)據(jù)字段瘩扼,所有改變其表示的希望都會(huì)丟失,因?yàn)榭蛻舳舜a可以被遠(yuǎn)程分發(fā)垃僚。
??然而集绰,如果一個(gè)類是package-private或者是private嵌套類,那么暴露它的數(shù)據(jù)字段沒(méi)有任何內(nèi)部錯(cuò)誤-假設(shè)它們足以描述類提供的抽象谆棺。在類定義和在使用它的客戶端中栽燕,這種方法比訪問(wèn)方法產(chǎn)生更少視覺(jué)混亂。雖然客戶端代碼與類內(nèi)部表示相關(guān)聯(lián)改淑,但該代碼僅限于包含該類的包碍岔。如果需要改變表示,你可以在不改變包外的任何代碼來(lái)更改它朵夏。在私有嵌套類的情況下蔼啦,更改范圍更一舉限制為封閉類。
??在Java平臺(tái)庫(kù)中的一些類違反了public類應(yīng)該不直接暴露字段的建議仰猖。突出的例子包括java.awt包下的Point和Dimension類捏肢。這些類應(yīng)該被視為警示故事,而不是模仿的例子饥侵。正如item67所述鸵赫,暴露Dimension類的內(nèi)部覺(jué)得導(dǎo)致了嚴(yán)重的性能問(wèn)題,至今仍然存在躏升。
??雖然public類直接暴露字段永遠(yuǎn)不是一個(gè)好主意辩棒,但是如果字段是不可變的,它的危害更小膨疏。你無(wú)法在不改變API的前提下改變類的表示一睁,你不能當(dāng)類正在被讀時(shí)做輔助性操作,但是你可以強(qiáng)制執(zhí)行不變量佃却。例如卖局,這個(gè)類保證每個(gè)實(shí)例表示有效時(shí)間:

image.png

??總結(jié),public類應(yīng)該永不暴露可變字段双霍。public類暴露不可變字段的危害較小砚偶,雖然這仍然有問(wèn)題。然而洒闸,有時(shí)候package-private或private嵌套類需要暴露字段染坯,無(wú)論可變還是不可變。
本文寫(xiě)于2019.3.21丘逸,歷時(shí)1天

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末单鹿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子深纲,更是在濱河造成了極大的恐慌仲锄,老刑警劉巖劲妙,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異儒喊,居然都是意外死亡镣奋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)怀愧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)侨颈,“玉大人,你說(shuō)我怎么就攤上這事芯义」福” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵扛拨,是天一觀的道長(zhǎng)耘分。 經(jīng)常有香客問(wèn)我,道長(zhǎng)绑警,這世上最難降的妖魔是什么求泰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮待秃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痹屹。我一直安慰自己章郁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布志衍。 她就那樣靜靜地躺著暖庄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪楼肪。 梳的紋絲不亂的頭發(fā)上培廓,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音春叫,去河邊找鬼肩钠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛暂殖,可吹牛的內(nèi)容都是我干的价匠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼呛每,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼踩窖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起晨横,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤洋腮,失蹤者是張志新(化名)和其女友劉穎箫柳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體啥供,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悯恍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滤灯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坪稽。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鳞骤,靈堂內(nèi)的尸體忽然破棺而出窒百,到底是詐尸還是另有隱情,我是刑警寧澤豫尽,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布篙梢,位于F島的核電站,受9級(jí)特大地震影響美旧,放射性物質(zhì)發(fā)生泄漏渤滞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一榴嗅、第九天 我趴在偏房一處隱蔽的房頂上張望妄呕。 院中可真熱鬧,春花似錦嗽测、人聲如沸绪励。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疏魏。三九已至,卻和暖如春晤愧,著一層夾襖步出監(jiān)牢的瞬間大莫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工官份, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留只厘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓舅巷,卻偏偏與公主長(zhǎng)得像懈凹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子悄谐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海帶_4bbc閱讀 765評(píng)論 1 2
  • 目錄: Android:Android 0.*Android 1.*Android 2.*Android 3.*A...
    敲代碼的令狐蔥閱讀 3,780評(píng)論 0 2
  • 我想要你能抱抱我,此刻我驚魂未定们陆。開(kāi)車經(jīng)過(guò)集市寒瓦,在路上,大卡車坪仇、水泥罐車杂腰、三輪車、電動(dòng)車椅文、自行車喂很、行人,我緊張地踩...
    張小花s閱讀 594評(píng)論 3 1
  • 第四章 “不愛(ài)是一生的遺憾皆刺,愛(ài)是一生的磨難少辣。” 清淺從小就愛(ài)湊各種各樣的熱鬧羡蛾,所以這次子凡哥哥邀請(qǐng)她她也沒(méi)有猶豫就...
    廣電1班李琳琳閱讀 198評(píng)論 0 0
  • 那個(gè)尋常的女人 我只是個(gè)平常的女人 從沒(méi)見(jiàn)過(guò)異象 但我要告訴你 我能知道的這個(gè)世界 以及我尚未經(jīng)歷的那些世界 我的...
    一安爾雅閱讀 325評(píng)論 4 7