Java 冗長的根源
Bruce Eckel 引用 Steve Yegge《名詞王國》:**Java 強迫一切皆對象**,導致「只想傳個回調」卻須寫匿名內部類,樣板代碼淹沒業務邏輯。GUI 開發、事件監聽、並發任務提交處處受困。
閉包 (Closure) 的承諾
- 將**代碼塊作為值傳遞**,無需包裝在類中。
- 捕獲外部作用域變量 (詞法閉包)。
- 極大簡化:集合操作、回調、並發、資源管理 (withLock/using 模式)。
// 假想閉包語法 (JDK 7 早期提案)
button.addActionListener({ => System.out.println("Clicked") });
list.filter({ it > 3 }).each({ println it });
executor.submit({ => doHeavyWork() });
爭論焦點
| 支持方 | 反對/謹慎方 |
| 簡化 API、函數式風格、並發友好 | 語言複雜度激增、破壞「簡單」初心 |
| 與 C#/Scala/Groovy 看齊 | 匿名類已足夠、IDE 自動生成無痛點 |
| 集合庫、並發庫可重寫更優雅 | 檢查型異常、返回類型推導、this 語義難處理 |
Bruce Eckel 大膽異想:Java 3K (Java 3000)
借鑒 **Python 3000** 斷裂式升級:
- 語法相似但**不兼容**舊版 Java。
- 運行在**同一 JVM** 上 (字節碼兼容)。
- 擁有**真正泛型** (擦除消失)、**閉包**、移除基本類型 (一切皆對象)、模塊系統。
- 舊代碼繼續跑舊 Java,新項目享受現代語法。
歷史結局
- JDK 7 (2011) **未引入閉包** (Oracle 收購 Sun 後凍結語言變更)。
- JDK 8 (2014) 引入 **Lambda 表達式** (函數式接口單抽象方法實例) + **Stream API** + **默認方法** —— 以**最小語法變動**實現 80% 閉包價值。
- Java 9+ 模塊系統 (JPMS)、var、Record、Pattern Matching、虛擬線程 (Project Loom) 持續演進,**始終保持向後兼容**,未走 Java 3K 斷裂路線。
啟示
**演進優於革命**。Java 通過「受限閉包」(Lambda) + 庫重寫 (Stream) + 運行時創新 (JIT/Loom),在不破壞生態前提下持續現代化。這正是「名詞王國」以務實方式拥抱函數式的答案。
- 上一篇文章: Java 遊戲《Peace Maker》:在中東衝突中尋找和平平衡
- 下一篇文章: Jwork 框架 PHP V2.0:融合 Java/.NET/PHP/ASP 四語言精華的國產全棧框架
Copyright ©
程式碼之家 All Rights Reserved