前言:被低估的里程碑版本
JDK 1.5.1 釋出時只是修正版,但 JDK 5.0 (代號 Tiger) 本身卻是 Java 語言演進史上劃時代的版本。重讀《Java 1.5 Tiger: A Developer's Notebook》並結合實戰經驗,我將新特性按實用價值重新排序,揭示 Annotation 為何是真正的「核武器級」特性。
核心觀點:Annotation 是打破 C/C++ 思維框架的語言革命武器
動態語言僅簡化程式碼量,未在程式架構層面突破。而 Annotation 配合 AOP,實現了「宣告式程式設計」範式轉移:將橫切關注點 (事務、安全、日誌、快取) 從業務邏輯中剝離,以中介資料形式附著於類別/方法/欄位,由容器在執行期編織。這是 Java 從「物件導向」邁向「層面導向」的關鍵一步。
實用特性分級評價
⭐⭐⭐⭐⭐ 必須掌握:Annotation (JSR 175)
- 編譯期檢查、程式碼生成、執行期反射檢測三大應用模式
- 標準 Annotation:@Override、@Deprecated、@SuppressWarnings
- 元 Annotation:@Retention、@Target、@Documented、@Inherited
- 實戰:Spring @Transactional、JPA @Entity、JUnit @Test、自訂驗證 @Valid
⭐⭐⭐⭐ 體驗明顯:Auto-boxing/Unboxing
- 基本型別與包裝類別自動轉換:`Integer i = 10; int j = i;`
- ⚠️ 陷阱:`Integer a = 1000, b = 1000; a == b` 為 false (超出快取範圍 -128~127)
- 效能代價:頻繁裝箱拆箱產生大量臨時物件,熱點路徑仍建議用基本型別
⭐⭐⭐ 架構價值大:Generics (JSR 14)
- 編譯期型別安全、消除強制轉型、API 契約文檔化
- 代價:型別擦除導致執行期無型別資訊、無法 `new T()`、無法建立泛型陣列
- 通配符:` extends T>` (生產者) vs ` super T>` (消費者) — PECS 原則
- 實戰價值:集合框架、DAO 介面、Builder 模式、Fluent API 設計
⭐⭐⭐ 語法糖:Enhanced for Loop (for-each)
- 取代 Iterator 手動迭代:`for (String s : list)`
- 限制:無法移除元素、無法取得索引、需配合 Generics 避免轉型
⭐⭐⭐⭐ 類型安全枚舉:Enum (JSR 201)
- 替代 `public static final int` 與魔術字串/數字
- 本質是 `final class extends Enum`,可攜帶屬性、方法、實作介面
- 內建 `values()`、`valueOf()`、序列化支援、EnumMap/EnumSet 高效實現
- 進階:策略枚舉模式 — 每個枚舉常數實作不同演算法行為
⭐⭐ 便利性:Static Import
- `import static java.lang.Math.*;` → 直接用 `sin(x)`、`PI`
- ⚠️ 過度使用導致命名空間污染、可讀性下降,建議僅用於常數與工具方法
⭐ 其他改進
- 可變參數 : `void foo(String... args)` 實為陣列語法糖
- C 風格 Formatter / `printf`、掃描器 `Scanner`
- JVM 工具、Concurrency (java.util.concurrent)、改進的 Unicode/JDBC RowSet/Swing
遺憾與反思:為什麼當時覺得「對小民無感」?
回顧當年筆記,我將 Concurrency、JVM Tools 歸為「對我們這樣的小民沒什麼感覺」。這是典型的「應用層開發者視角盲區」:
- Concurrency 包 (Doug Lea 大師作品) 是高併發系統的基石,`ExecutorService`、`ConcurrentHashMap`、`CountDownLatch`、`Future` 等至今仍是日常必用
- JVM Tools (jconsole、jstack、jmap、jhat) 是生產環境故障排查的標配
- 這些「底層工具」決定了系統能走多遠、穩不穩
給現代開發者的建議
JDK 5 的遺產早已融入現代 Java (8/11/17/21) 的血液:Lambda 依賴 Functional Interface (Annotation 定義)、Stream API 依賴 Generics、Optional 依賴泛型、Record 依賴編譯器增強。重讀 Tiger 時代的設計決策,能讓我們更深刻理解今日語言特性的來龍去脈。
真正的語言革命,不在語法糖,而在於它賦予了我們表達「架構意圖」的原生能力。