愛伊米

OpenJDK 提案將為 Java 帶來通用泛型

出品|開源中國

文|白開水

Infoworld 訊息指出,根據 OpenJDK 提案,Java 將獲得通用泛型(universal generics),此舉旨在使該語言更易於使用。不過該規劃本身需要花費數年時間才能實現。

通用泛型最初將透過 OpenJDK 社群中的三個提案來實現。甲骨文方面表示,這些提議將極大地改變 Java 語言和 JVM,結合類的靈活性和基元的效能。 一切(包括基元)都將成為一個物件。 但是所選擇的路徑並不會降低基元的效能,而是使類的效能與基元一樣。

三個 JDK Enhancement Proposals(JEP)中的每一個都提供了不同的功能,但想要達到預期的效果,則需要結合這三個提案。其中最主要的是一份於 2 月建立並於 10 月 29 日更新的JEP 草案,它要求透過允許 Java 型別變數覆蓋這兩種型別來統一對泛型程式碼中引用和原始值型別的處理。將會產生新的 warnings,以維護通用程式碼的安全保證。

OpenJDK 提案將為 Java 帶來通用泛型

使用使用者宣告的原始物件增強 Java 物件模型的第二個 JEP將作為先決條件;計劃將基本基元與物件統一起來的第三個 JEP,預計也會推進。其他 JEP 則將隨之更新標準庫、解決 null warnings 和使庫為專業化做好準備,並在 JVM 中引入通用 API 的執行時專業化。

通用泛型計劃提倡讓 generic API 直接支援 primitive value types,以便直接對 custom-defined primitives 進行操作;引用型別也將被支援。提案指出,理想情況下這應該是 Java 泛型的預設行為,這樣 primitive value types 就可以完全參與到 Java 生態系統中。目前還沒有確定通用泛型何時會出現在 Java 中,但預計仍需要很多年才能實現。

且通用泛型將擴充套件平臺中現有的泛型能力。2004年推出的Java 2 Platform 和 Standard Edition 5。0為語言和平臺帶來了泛型,允許開發者識別他們想要儲存在集合中的內容,並使迭代器型別安全。但在 2004 年的泛型迭代中,開發者只能對引用型別進行泛化。透過將基元與引用統一起來,可以採取下一步措施,允許型別引數在所有型別上進行範圍化。

值得一提的是,Java 並不是唯一關注泛型功能的語言,Go 1。18 也計劃支援泛型。