Effective Java 讀書筆記(2)
Chapter 4 Class And Interface
類和介面是 Java 語言中最核心的抽象概念. 這章裡的建議不是教你如何設計一個類 (這個是設計模式的內容), 而是給出一些通用的建議。
Item 13 Minimize the accessibility of classes and members
最小化類的可見度. 一個設計良好的模組應該儘量隱藏內部實現的細節, 介面和實現分離. 所以應該類和方法應該儘量降低自己的可見性. 特別是屬性, 即使是 final 的屬性也不應該是 public, 應該提供 getter 和 setter. 唯一的例外就是 static final 的屬性.
這一條的原則是沒有錯的, 不過 Java 提供的三種可見性裡並沒有模組可見. 而更多的時候其實我們需要的是 module 內部的可見域. Kotlin 就提供了 internal 可見性, 只有 module 內部可見.
BTW: Java 一直想把模組化的方式標準化. OSGi 也使用了很多年, 不過 Oracle 更喜歡自己提出的 Jigsaw. 所以一直沒有共識, 從 Java 7, Java 8 拖到現在的即將要出的 Java 9. Jigsaw 在最新的投票又被投了反對票. 所以 Java 9 到底能不能加入這功能還是一個未知數. Java 9 釋出後, 帶上了 Jigsaw.
Item 14 In Public classes, use accessor methods, not public fields.
總結:
- 在 Public 的類中不應該暴露任何可變的域.
- 對於不可變的域, 比如帶 final 的基本型別的域可以考慮暴露, 但是最好不要.
- 對於包可見或者私有的類可以考慮直接暴露.
寫 getter 和 setter 實在不是美好的體驗, 雖然可以用 IDE 生成, 但是確實會很繁瑣. 這裡就不得不提一下 Kotlin 的 Property 實在是相當方便啊, Java 在語法糖上還是要加把勁啊.
Chapter 5 Generics
Java 的一個很重要的優點就是語法簡單. 泛型可能是 Java 裡唯一一個比較複雜的語法. 使用起來確實有很多需要注意的地方.
Item 25 Don't use raw types in new code
這個大家應該已經習慣.
Item 28 Use bounded wildcards to increase API flexibility
總結:
- 為了最大化 API 的靈活性. 在代表生產者或者消費者的輸入引數中使用萬用字元型別. 要熟練使用 PECS 法則.
- 不要在返回值中使用萬用字元型別.
- 如果讓類的使用者去思考關於萬用字元型別的問題, 那麼 API 的設計裡一定有一些錯誤.
- 如何型別引數, 只出現在方法宣告中, 使用萬用字元型別來替代.
這一章中大概時本書中最有價值的一章. PECS 原則可以讓自己少走很多彎路.
相關文章
- Effective Java 讀書筆記Java筆記
- Effective Java讀書筆記(目錄)Java筆記
- 《Effective Java 第二版》讀書筆記Java筆記
- 《Effective-Ruby》讀書筆記筆記
- 《Effective C#》讀書筆記C#筆記
- 《Effective C++》讀書筆記C++筆記
- Effective Java讀書筆記六:方法(38-44)Java筆記
- Effective Java讀書筆記八:巢狀類(22)Java筆記巢狀
- 《effective java》讀書筆記2(對於所有物件都通用的方法)Java筆記物件
- 《More Effective C#》讀書筆記C#筆記
- 《effective java》讀書筆記1(建立和銷燬物件)Java筆記物件
- Effective Java讀書筆記一:併發(66-73)Java筆記
- Effective Java讀書筆記五:異常(57-65)Java筆記
- Effective Java讀書筆記八:序列化(74-78)Java筆記
- 《Effective C++》第3章 資源管理(2)-讀書筆記C++筆記
- Effective Java讀書筆記四:通用程式設計(45-56)Java筆記程式設計
- 《Effective C++》第4章 設計與宣告(2)-讀書筆記C++筆記
- Effective Java讀書筆記二:列舉和註解(30-37)Java筆記
- Effective Java讀書筆記三:建立和銷燬物件(1-7)Java筆記物件
- Effective Java讀書筆記七:泛型(23-29 部分章節需要重讀)Java筆記泛型
- FPGA讀書筆記2FPGA筆記
- 《Effective Objective-C 2.0》讀書/實戰筆記 一Object筆記
- 《Effective C++》第5章 實現-讀書筆記C++筆記
- 《Effective C++》第2章 構造/析構/賦值運算(2)-讀書筆記C++賦值筆記
- 讀書筆記【2】 初探Storyboard筆記
- 讀書筆記(2)《微精通》筆記
- [心得] Effective Java心得筆記Java筆記
- java讀書筆記---垃圾回收Java筆記
- 《Effective C++》第3章 資源管理(1)-讀書筆記C++筆記
- 《Effective C++》第2章 構造/析構/賦值運算(1)-讀書筆記C++賦值筆記
- Effective Java讀書筆記——第三章 對於全部物件都通用的方法Java筆記物件
- 《Effective DevOps》閱讀筆記 59dev筆記
- 《Effective DevOps》閱讀筆記 82dev筆記
- 《Effective DevOps》閱讀筆記 19dev筆記
- 讀書筆記-----Java中的引用筆記Java
- head first java讀書筆記Java筆記
- 《Effective C++》第4章 設計與宣告(1)-讀書筆記C++筆記
- 《HTTP/2 基礎教程》 讀書筆記HTTP筆記