?????? 2006 年偷溺,Java 6 面世;2011 年钱贯,Java 7 發(fā)布挫掏。而后,Oracle 在三年一個版本的頻率中推出了 Java 8 和 Java 9 秩命,并在 Java 9 發(fā)布之際宣布提速 Java 版本迭代尉共,調(diào)整為每半年發(fā)布一個新版本。此舉被許多開發(fā)者評價為這門一貫保守的編程語言的“自我放飛”弃锐,隨之而來的除了對更多新特性的期待袄友,也包括一些負面議論。
??????? Java 9 發(fā)布半年后拿愧,首個采用新發(fā)版周期的 Java 10 于 2018 年 3 月 20 日(當?shù)貢r間)正式發(fā)布杠河。相比于主打“模塊化”且廣受好評的 Java 9 ,Java 10 主推的“局部變量類型推斷”似乎從公布之初就不被特別看好浇辜,使用 var 也引起了不少爭議券敌。本期開源訪談,我們邀請到了資深 Java 開發(fā)者柳洋,Beetl待诅、BeetlSQL 開源項目的作者李家智(@閑大賦),和我們分享他對 Java 的一些見解熊镣。
?????????????????????????????????????????????????????????????????????????????????????????????—— 嘉賓簡介 ——
?????? ?李家智卑雁,從事 Java 和 Java EE 開發(fā)已有 18 年,目前就職于東方金科绪囱,高級架構(gòu)師测蹲。參與集團金融項目建設(shè),參與公司技術(shù)研發(fā)和創(chuàng)新鬼吵。在開源中國的昵稱是@閑大賦扣甲,社區(qū)資深用戶,在碼云平臺上托管了多個優(yōu)秀的開源項目齿椅,包括國內(nèi)流行模板語言 Beetl 琉挖,數(shù)據(jù)庫 ORM 工具 BeetlSQL 等。最近為電子工業(yè)出版社寫了一本《Spring Boot 2 精髓》涣脚,以及依據(jù)這本書完成的開發(fā)腳手架 SpringBoot-Plus 示辈。其技術(shù)座右銘是:“沒有用一個對象解決不了的難題,如果有遣蚀,就用倆個對象”矾麻。
????????????????????????????????????????????????????????????????????????????????????????? ? —— 訪談?wù)?——
Java 9 實現(xiàn)模塊化是否有對 Java 開發(fā)者帶來實質(zhì)性的影響纱耻?
?????? Java9 以前通過 Package,Class 來組織 Java 代碼射富,Java9 增加了 Modular 的方式組織代碼膝迎。除了 Java 本身分為多個模塊,開源工具也會按照這種方式組織開源產(chǎn)品胰耗。Java 模塊會影響項目的開發(fā)方式和部署方式限次,我認為會給 Java 開發(fā)者帶來影響。這是 Java 開發(fā)者必須掌握的技能柴灯。 另外卖漫,未來也許會出現(xiàn)關(guān)于類似 mvnrepository 關(guān)于模塊的索引網(wǎng)站。
?Java 10 的局部變量類型推斷褒貶不一赠群,使用 var 也引起了許多爭議羊始,對此如何評價?
????? 我對此有保守的意見: 代碼一次編寫查描,多次閱讀突委,var 一定程度會降低代碼可閱讀性。程序員需要一定時間培養(yǎng)閱讀有 var 代碼習慣 ,以前看到等號左右倆邊都能清楚變量類型冬三,現(xiàn)在還要往右邊看匀油。甚至還需要進入方法的定義才能看變量類型。 不過既然已經(jīng)推出來勾笆,那就爭取能使用敌蚜,畢竟寫代碼就快多了。希望個以后有 IDE 插件把代碼里的 var 在線顯示成 Java 類型窝爪,或者相反弛车。
除了類型推斷之外,JDK 10 的哪些新特性您比較滿意或認為是比較實用的蒲每?
?????? 有倆個我比較喜歡纷跛,一是 JEP 316 ,在可選內(nèi)存設(shè)備上分配堆內(nèi)存邀杏,可以使得 Java 能在大數(shù)據(jù)或者內(nèi)存數(shù)據(jù)庫方面有更出色的表現(xiàn)贫奠。另外就是實用 API 不斷增多,比如輸入流 copy 到輸出流淮阐、反射、JMX 增強刁品,這些對于很多開源框架都有用泣特。 Oracle 提速 Java 迭代周期,六個月一次的版本發(fā)布頻率讓很多人抱怨跟不上挑随,對此說說您的觀點吧状您。 很多開源產(chǎn)品都是這個節(jié)奏,如果以開放、開源角度看待 Oracle JDK 膏孟,這是正常節(jié)奏眯分。在這樣的發(fā)布頻率下,Java 的包容能力更強柒桑,會有更多的新理念弊决、新框架、新的 API 引入進來魁淳,我覺得開發(fā)者更應(yīng)該緊跟 Java 新功能飘诗,否則就落后特別多。 對我來說界逛,不會抱怨跟不上昆稿,唯一的抱怨也許是公司產(chǎn)品因為歷史原因還暫時用不上 Java 新版本特性,沒有機會實踐新特性息拜。
Oracle 似乎有意在逐漸減少 OpenJDK 和 Oracle JDK 之間的技術(shù)差異溉潭,這對開發(fā)者使用選擇上是否會有影響?
????? Oracle 是 OpenJDK 的領(lǐng)導者也是主要貢獻者少欺。就我個人經(jīng)驗來說喳瓣,我一直在跟隨廠商提供的中間件,也一直使用官方提供的 JDK 狈茉,并沒有選擇上的困難夫椭。我有朋友做性能監(jiān)控產(chǎn)品,倒是經(jīng)常研究 OpenJDK 源碼氯庆。 Java 之前一直被認為設(shè)計思想太過保守蹭秋,但近期模塊化、快速迭代堤撵、減輕內(nèi)部模塊耦合(分離 JavaFX)等動作也被看作是 Oracle 思想上的轉(zhuǎn)變仁讨。
從個人角度,希望 Java 能有哪些方面的創(chuàng)新或跟進实昨?這門“保守”的語言如果不再保守洞豁,您認為是好是壞?
?????? 我從事 Java 和 Java EE 開發(fā)有 18 年荒给,一直得益于 Java 的保守丈挟。 穩(wěn)定技術(shù)棧,向下兼容志电,開發(fā)人員能從 Java 的保守獲得收益曙咽。別忘記 Python3 和 2 的不兼容造成的問題,還有一些流行開源不兼容造成的問題挑辆。比如 Spring Boo 2 例朱,就有不少特性不兼容 Spring Boot 1 孝情。 現(xiàn)在創(chuàng)新在井噴,審美也在不斷變化洒嗤,Java 必然需要跟進這些創(chuàng)新箫荡,比如 JSON 和 YAML 應(yīng)該進入標準類庫。我想著如果當年 Java 迭代也這么快渔隶,也許現(xiàn)在的 JDK Logging 就不那么雞肋了羔挡,因此我認為 Java 不再保守,是一件非常好的事情派撕。
?最后婉弹,和我們分享一下您的個人項目的 Java 版本跟進計劃及后續(xù)方向。
?????? Beetl 內(nèi)部也有個類型推測功能终吼,在運行模板渲染后镀赌,會嘗試對模板里的變量進行類型推測,從而優(yōu)化模板渲染际跪,未來打算進一步優(yōu)化一下引擎商佛,利用已經(jīng)實現(xiàn)的類型推測來進來提高運行性能。另外姆打,如果采用 Java9 模塊化良姆,Beetl 體積會更小。分離出核心引擎模塊幔戏,和 Web 模塊玛追,以及擴展模塊。使用者會按照自己需求使用不同模塊闲延。
BeetlSQL 現(xiàn)在使用用戶也非常多痊剖,它簡單易學,通過內(nèi)置 API 和 Query 類支持少寫 SQL 的理念垒玲,同時通過 Mapper 類和對應(yīng)的 Markdown 文件來管理復雜 SQL 陆馁。未來打算增強 ORM 功能,這一塊相對于 Hibernate 合愈,還是有很大差距叮贩。
?SpringBoot-Plus 是基于 Spring Boot 2 的開發(fā)腳手架,剛開源一月佛析,需要進一步完善代碼生成功能還有文檔管理功能益老,對了,還打算集成紅薯的 J2Cache 寸莫。J2Cache 是個兩級緩存框架捺萌,它是真正的高性能緩存框架。