Bruce Eckel 在其博客發文稱:「Java 應徹底停止增加新特性」,引發社區廣泛討論。核心觀點:組合復雜性隨特性增長呈指數級上升,現有特性交互已產生難以預測的邊界情況,IDE 掩蓋了代碼冗長問題,導致語言設計忽視可讀性。
Joshua Bloch 指出:單一特性復雜性可控,但新特性與所有現有特性任意組合產生的交互復雜性才是真正殺手。例如泛型與類型擦除、协变數組、重載解析、類型推導等交織,產生大量「Java 疑難雜症」素材。
Eckel 親歷 C++ 標準化 8 年,親見「為兼容 C 而犧牲語言簡潔性」。Java 若堅持絕對向後兼容,新特性只能在舊模型上打補丁(如泛型擦除、Lambda 實為單方法接口語法糖),導致實現不完整、語義驚喜。
Eckel 自稱「特性上癮者」,現建議:重大新特性(如閉包)應在新語言(Scala、Kotlin)實現,Java 轉型為「工具語言」(如 C),專注庫完善、工具鏈、性能優化,不再追趕語法潮流。
Java 9+ 採用 6 個月發布節奏,引入模塊系統、var、Record、Pattern Matching、Virtual Threads 等特性,實踐證明:克制的、有預算的、工具配套的特性演進 可行。關鍵在於:
結論:不應完全凍結,但必須建立「特性預算」與「復雜性審計」機制,每個新特性需證明其收益遠超組合復雜性成本,並提供完整工具鏈支持。