Effective Java Item25:將原始碼檔案限制為單一top-level的類別

整理 Effective Java 書中 Item 25:Limit source files to a single top-level class 心得筆記

主旨:保持一檔一類別,避免隱藏的地雷

Java 技術上允許你在一個 .java 檔案中定義多個 top-level 類別(也就是非巢狀的 public 或 package-private 類別),但這麼做其實是一個踩雷設計。這會讓你的程式行為變得難以預測,尤其當你在不同檔案中定義了相同名稱的類別,編譯結果會依照檔案的編譯順序而不同,產生極大的風險。

Read more

Effective Java Item24:比起非靜態成員類型,更偏好靜態成員類型

整理 Effective Java 書中 Item 24: Prefer static member classes to non-static member classes 心得筆記

主旨

在 Java 中,巢狀類別(Nested Class)是一種將類別定義在另一個類別內部的設計方式。根據是否需要外部類別的實例,有四種巢狀類別:static member classnon-static member classlocal classanonymous class。本篇聚焦在:當巢狀類別不需要外部類別實例時,應優先使用 static member class,這樣可以節省記憶體、提升效能、避免記憶體洩漏,也對設計更有彈性。

Read more

Effective Java Item22:介面只能拿來定義型別,不要拿來存常數

整理 Effective Java 書中 Item 22: Prefer interfaces to abstract classes 心得筆記

主旨

Java 的介面(interface)本質是用來定義「型別」的 —— 換句話說,介面要描述的是「這個物件可以做什麼」。如果你只是想要存一些常數,卻用介面來達成,那麼你就誤用了這個語言工具。

Read more

Effective Java Item20:盡量使用介面,而非抽象類別

整理 Effective Java 書中 Item 20: Prefer interfaces to abstract classes 心得筆記

主旨

Java 提供兩種方式定義「可以有多個實作」的類型:介面(interface)和抽象類別(abstract class)。在 Java 8 引入 default methods 之後,兩者都能提供方法實作。但總體來說,介面更靈活、延伸性更好,也比較不會限制使用者的設計。本章重點就是告訴你:大多數情況下,請選擇介面。

Read more

Effective Java Item19:設計可繼承的類別,否則就禁止繼承

整理 Effective Java 書中 Item 19: Design and document for inheritance or else prohibit it 心得筆記

主旨

Java 裡的繼承功能很強,但使用起來也很危險。如果你打算讓別人「繼承你的類別」,你不只是要寫出可以用的 API,還要公開類別的內部行為細節。如果沒做到這一點,繼承後的子類可能會在某次更新中爆掉。

所以這一條的建議是:

如果你沒打算讓別人繼承,就該禁止繼承;
如果你開放繼承,就要設計與文件都做到位。

Read more