來自:開源中國
連結:oschina.net/question/2896879_2276456
2006 年,Java 6 面世;
2011 年,Java 7 釋出。
而後,Oracle 在三年一個版本的頻率中推出了 Java 8 和 Java 9 ,併在 Java 9 釋出之際宣佈提速 Java 版本迭代,調整為每半年釋出一個新版本。
此舉被許多開發者評價為這門一貫保守的程式語言的“自我放飛”,隨之而來的除了對更多新特性的期待,也包括一些負面議論。
Java 9 釋出半年後,首個採用新發版週期的 Java 10 於 2018 年 3 月 20 日(當地時間)正式釋出。相比於主打“模組化”且廣受好評的 Java 9 ,Java 10 主推的“區域性變數型別推斷”似乎從公佈之初就不被特別看好,使用 var 也引起了不少爭議。
本期開源訪談,我們邀請到了資深 Java 開發者,Beetl、BeetlSQL 開源專案的作者李家智(@閑大賦),和我們分享他對 Java 的一些見解。
李家智
從事 Java 和 Java EE 開發已有 18 年,目前就職於東方金科,高階架構師。參與集團金融專案建設,參與公司技術研發和創新。
在開源中國的暱稱是@閑大賦,社群資深使用者,在碼雲平臺上託管了多個優秀的開源專案,包括國內流行模板語言 Beetl ,資料庫 ORM 工具 BeetlSQL 等。
最近為電子工業出版社寫了一本《Spring Boot 2 精髓》,以及依據這本書完成的開發腳手架 SpringBoot-Plus 。
其技術座右銘是:“沒有用一個物件解決不了的難題,如果有,就用倆個物件”。
1、Java 9 實現模組化是否有對 Java 開發者帶來實質性的影響?
Java9 以前透過 Package,Class 來組織 Java 程式碼,Java9 增加了 Modular 的方式組織程式碼。除了 Java 本身分為多個模組,開源工具也會按照這種方式組織開源產品。
Java 模組會影響專案的開發方式和部署方式,我認為會給 Java 開發者帶來影響。這是 Java 開發者必須掌握的技能。
另外,未來也許會出現關於類似 mvnrepository 關於模組的索引網站。
2、Java 10 的區域性變數型別推斷褒貶不一,使用 var 也引起了許多爭議,對此如何評價?
我對此有保守的意見:
程式碼一次編寫,多次閱讀,var 一定程度會降低程式碼可閱讀性。程式員需要一定時間培養閱讀有 var 程式碼習慣 ,以前看到等號左右倆邊都能清楚變數型別,現在還要往右邊看。甚至還需要進入方法的定義才能看變數型別。
不過既然已經推出來,那就爭取能使用,畢竟寫程式碼就快多了。希望個以後有 IDE 外掛把程式碼裡的 var 線上顯示成 Java 型別,或者相反。
3、除了型別推斷之外,JDK 10 的哪些新特性您比較滿意或認為是比較實用的?
有倆個我比較喜歡,一是 JEP 316 ,在可選記憶體裝置上分配堆記憶體,可以使得 Java 能在大資料或者記憶體資料庫方面有更出色的表現。另外就是實用 API 不斷增多,比如輸入流 copy 到輸出流、反射、JMX 增強,這些對於很多開源框架都有用。
4、Oracle 提速 Java 迭代週期,六個月一次的版本釋出頻率讓很多人抱怨跟不上,對此說說您的觀點吧。
很多開源產品都是這個節奏,如果以開放、開源角度看待 Oracle JDK ,這是正常節奏。
在這樣的釋出頻率下,Java 的包容能力更強,會有更多的新理念、新框架、新的 API 引入進來,我覺得開發者更應該緊跟 Java 新功能,否則就落後特別多。
對我來說,不會抱怨跟不上,唯一的抱怨也許是公司產品因為歷史原因還暫時用不上 Java 新版本特性,沒有機會實踐新特性。
5、Oracle 似乎有意在逐漸減少 OpenJDK 和 Oracle JDK 之間的技術差異,這對開發者使用選擇上是否會有影響?
Oracle 是 OpenJDK 的領導者也是主要貢獻者。就我個人經驗來說,我一直在跟隨廠商提供的中介軟體,也一直使用官方提供的 JDK ,並沒有選擇上的困難。我有朋友做效能監控產品,倒是經常研究 OpenJDK 原始碼。
6、Java 之前一直被認為設計思想太過保守,但近期模組化、快速迭代、減輕內部模組耦合(分離 JavaFX)等動作也被看作是 Oracle 思想上的轉變。從個人角度,希望 Java 能有哪些方面的創新或跟進?這門“保守”的語言如果不再保守,您認為是好是壞?
我從事 Java 和 Java EE 開發有 18 年,一直得益於 Java 的保守。
穩定技術棧,向下相容,開發人員能從 Java 的保守獲得收益。別忘記 Python3 和 2 的不相容造成的問題,還有一些流行開源不相容造成的問題。比如 Spring Boo 2 ,就有不少特性不相容 Spring Boot 1 。
現在創新在井噴,審美也在不斷變化,Java 必然需要跟進這些創新,比如 JSON 和 YAML 應該進入標準類庫。我想著如果當年 Java 迭代也這麼快,也許現在的 JDK Logging 就不那麼雞肋了,因此我認為 Java 不再保守,是一件非常好的事情。
7、最後,和我們分享一下您的個人專案的 Java 版本跟進計劃及後續方向。
Beetl 內部也有個型別推測功能,在執行模板渲染後,會嘗試對模板裡的變數進行型別推測,從而最佳化模板渲染,未來打算進一步最佳化一下引擎,利用已經實現的型別推測來進來提高執行效能。
另外,如果採用 Java9 模組化,Beetl 體積會更小。分離出核心引擎模組,和 Web 模組,以及擴充套件模組。使用者會按照自己需求使用不同模組。
BeetlSQL 現在使用使用者也非常多,它簡單易學,透過內建 API 和 Query 類支援少寫 SQL 的理念,同時透過 Mapper 類和對應的 Markdown 檔案來管理複雜 SQL 。未來打算增強 ORM 功能,這一塊相對於 Hibernate ,還是有很大差距。
SpringBoot-Plus 是基於 Spring Boot 2 的開發腳手架,剛開源一月,需要進一步完善程式碼生成功能還有檔案管理功能,對了,還打算整合紅薯的 J2Cache 。J2Cache 是個兩級快取框架,它是真正的高效能快取框架。
●編號643,輸入編號直達本文
●輸入m獲取文章目錄
大資料與人工智慧
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。