JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design » Effective Java  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [Effective Java] 條款13 : 偏愛不變性 (immutability)
metavige

metavige

版主

發文: 2134
積分: 10
於 2004-01-30 00:10 user profilesend a private message to usersend email to metavigereply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
何謂 immutable class(不可變類別)?
就是其實體不能修改的 class, 包含在這種 class 內的所有資訊都是在創建之初提供, 並在物件生存期間固定不變。
例如 String, 基本外覆類別(primitive wrapper classes)等, 這種 classes 比起 mutable classes 來說, 更容易設計、實現和使用, 不易犯錯而且更安全。

在建立 immutable class 時, 請遵守下列原則:
1. 不要提供任何 「可修改物件內容」的函式
2. 保證沒有任何函式被覆寫
3. 令所有欄位為 final
4. 令所有欄位都是 private
5. 保證對任何可變組件的互斥存取

剛剛開始的時候, 我是對 String 這個 class 是屬於 immutable class 有點懷疑, 畢竟小弟並沒有接受過 SCJP 的洗禮, 有些基本的東西並不了解
但是後來才知道像是一個簡單的 "A"+"B" 這個動作, 原來是去產生了一個新的物件, 來置放 "AB" 這個新的 String

immutable objects 基本上是多緒安全的, 不需同步機制的輔助, 因為就算是多個執行緒同時去存取某個 immutable class, 也不會破壞該物件

immutable objects 可被自由共享, 這使得我們永遠不必對他使用保護性拷貝(條款24)

immutable objects 對其他物件來說, 形成了大量構件

immutable objects 唯一的缺點就是, 每一個不同的值都必須需要一個獨立的物件

如果你執行一個多步操作, 就好像我之前提過的

1
String newString = "A" + "B";

每一步產生一個新物件, 但最後只需要保持最後的結果, 那這樣效率問題就會凸顯出來了

如果你可以預測這些多步操作的步驟, 則最好是提供一個 public mutable companion class, 就好像是 StringBuffer v.s. String


reply to postreply to post
請各位新手參考 論壇規範Java 新手 FAQ
話題樹型展開
人氣 標題 作者 字數 發文時間
11176 [Effective Java] 條款13 : 偏愛不變性 (immutability) metavige 997 2004-01-30 00:10
9672 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) tempo 232 2004-01-30 00:34
9666 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) TAHO 70 2004-01-30 01:13
9655 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) tempo 127 2004-01-30 01:22
9603 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) browser 107 2004-01-30 05:18
9643 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) tempo 1032 2004-01-30 12:13
9592 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Yoshi 139 2004-01-30 12:17
9585 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) tempo 195 2004-01-30 13:25
9548 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) anthonychen 225 2004-01-30 13:34
9532 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) saijone 996 2004-01-31 09:41
9613 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Duncan 247 2004-01-30 13:00
9514 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) metavige 131 2004-01-30 23:28
9518 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Millerlai 812 2004-01-31 01:45
9466 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Duncan 988 2004-02-01 02:59
9533 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Millerlai 2225 2004-02-01 18:45
9534 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) saijone 305 2004-01-31 09:07
9687 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) ingramchen 234 2004-01-31 12:27
9532 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) TAHO 558 2004-01-31 13:46
9522 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) ingramchen 77 2004-01-31 20:37
9567 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Millerlai 1688 2004-01-31 14:16
9491 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) TAHO 198 2004-01-31 15:00
9472 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Millerlai 647 2004-01-31 16:02
9484 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) tempo 293 2004-02-01 01:07
8008 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) moon_light 631 2005-07-04 01:43
9427 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Duncan 387 2004-02-01 03:07
9427 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) metavige 264 2004-02-02 01:04
9425 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) saijone 683 2004-02-02 06:35
9708 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Duncan 853 2004-02-02 10:32
9575 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) Yoshi 202 2004-01-30 09:28
9570 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) anthonychen 155 2004-01-30 10:33
9605 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) ymshin 166 2004-01-30 01:00
9532 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) TAHO 515 2004-01-30 14:04
9534 Re:[Effective Java] 條款13 : 偏愛不變性 (immutability) popcorny 136 2004-01-30 15:05
» JWorld@TW »  Software Design » Effective Java

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8