歡迎光臨
每天分享高質量文章

18 年資深 Java 開發閑大賦:不再保守的 Java 更可愛

來自:開源中國

鏈接: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 。


其技術座右銘是:“沒有用一個物件解決不了的難題,如果有,就用倆個物件”。

Q
&
A


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、資料庫、運維等。

赞(0)

分享創造快樂