9月21日,這對Java程序員來說是個大日子,因為這一天跳票了整整一年的Java 9終于不再云遮霧繞,露出了真面目。對于Java 9以及相關的模塊化,相信大家還是很迷惑的,所以本文就Java 9模塊化的問題,采訪了Java 冠軍Stephen Colebourne,希望能夠對大家有所幫助。
問:OpenJDK管理委員會主席兼Oracle平臺集團開發副總裁George Saab在6月初表示:許多程序員可能現在還沒有使用JDK 9的模塊化。你對模塊化生態系統有什么看法?
Stephen Colebourne:Java平臺模塊系統(JPMS)并不是完美的,但是它的價值值得發布。程序員也可以繼續選擇使用類路徑,這是不會受到模塊更改的影響。Dodgy-Reflexion-Practices將會成為主要問題,為了解決這個問題必須升級一些庫。站在我個人的角度,我很高興看到模塊系統的工作結束和應用,因為有一些語言的主要挑戰被推遲了太久了。
問:Jigsaw功能早就應運而生,Java 9中發布這個功能將如何影響現有的和新的代碼庫?
Stephen Colebourne:無論是這兩種情況的哪一種,除非使用它們的依賴關系被模塊化或者是至少有部分被模塊化,否則程序員是很少會使用這個功能。雖然理論上模塊系統可以立即使用,但是最好還是等到依賴關系模塊化。
對于新的代碼庫,最重要的是要有一個模塊化計劃。要構建Maven類項目中的代碼,并確保沒有包被拆分成兩個模塊,為以后添加module-info.java文件鋪平道路。而對于現有代碼庫實現Jigsaw可能會相當困難。
問:毫無疑問,Java 9的新功能對程序員來說是一個新的挑戰 ,Jigsaw是其中之一嗎?你覺得什么功能特別有挑戰性?
Stephen Colebourne:剛才也說到了Jigsaw對現有代碼庫來說難度很大,就目前來說這個難度是不值得嘗試的,但是模塊是一個相當長遠的功能。
問:你可以給我們一些例子說明如何通過模塊來改進Java 9的體驗?
Stephen Colebourne:如果創建代碼和所有依賴關系模塊化的系統,代碼將自動更加穩定和更好的封裝。20年后,JVM將終于了解jar文件(模塊)的限制并遵守/執行。這是“艱難的愛”,但最終會取得更好的效果。
問:最近,Mark Reinhold在JavaOne-Keynote中表示,Jigsaw是Java 9中的絕對明星,你怎么看?其它JEP中你最喜歡哪個?
Stephen Colebourne:接口中的私有方法,為接口添加靜態和默認方法的功能已經改變了我API設計的方式。未來私有方式將會得到進一步改善。同時,我建議大家在界面中多實用“公共靜態”,“公共抽象”或“公共默認”方法,因為這可以增加了代碼可讀性。
問:Nicolai Parlog有一個名為“WTF,Java 9”的新項目,他收集了很大簡短,獨立的示例,來幫助大家看懂Java 9的功能以及使用方法。在使用Java 9的過程中,您個人發現了哪些問題,又是如何解決的?
Stephen Colebourne:我已經測試了很早的版本,但是并沒有發現重大問題。
問:對Java 9最重要的誤解是什么?Jigsaw表現到底如何?
Stephen Colebourne:其實很多現有的Java代碼都可以在Java 9中使用,類路徑仍然存在,模塊是選擇使用。在我看來,大多數程序員都應該完全忽視模塊系統,直到它們的依賴關系全部或者至少部分地被模塊化。所以最大的誤解是,如果升級到Java 9,那么之前的代碼都實現不了了,事實上,升級到Java 9絕對不會比升級到其它Java版本更糟糕。
問:Jigsaw是JBoss模塊和OSGi的對手嗎?為什么程序員選擇Jigsaw而不是兩種已知的替代品?
Stephen Colebourne:Java平臺模塊系統與OSGi沒有太多共同之處。后者最適合于動態模塊,例如用于JVM運行時的模塊可以出現和消失的生態系統。OSGi模塊系統還適合處理復雜的情況,例如同一個Jar的兩個版本同時存儲在內存中。這種類型的復雜性并不是大多數系統所必需的,所以平臺模塊系統在這其中獲得了生存空間。JBoss模塊我還沒有使用,所以不方便說什么。
問:你想在Java 10中看到什么?
Stephen Colebourne:希望Java 10來的能夠比Java 9快,而且我希望它的更改能夠少一些。在未來的版本中,不只是Java 10,能夠有數據類的擴展,包括現在用于POJO / bean的用例,這對Java來說將是非常有用的開發。