領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多我相信大多數讀者都知道,Java SE 8 已於上月釋出。與最近釋出的 STS 3.5.0 及其對 JDK 8 的完整支援相結合,我們認為現在是升級 Sagan 以利用新語言特性和 API 的理想時機。
注意:還不熟悉 Sagan 專案?它是 Spring 的參考應用程式,為本部落格和 spring.io 上的所有其他內容提供支援。請檢視此係列中的第一、第二和第三篇帖子以獲取更多詳細資訊。
Cloud Foundry 的 Java 構建包從釋出之日起就提供了對 JDK 8 的支援。為了開始使用它,我們建立了自己的構建包分支,將 JDK 版本從 1.7.0 提升到 1.8.0,並配置了我們的 Gradle 構建,以便在將 Sagan 部署到生產環境時使用我們的分支。
注意:在不久的將來,1.8.0 將成為 Cloud Foundry 構建包的預設版本,屆時所述的分支將不再必要。
正如您可能已經注意到的,Sagan 使用 Travis CI 進行持續整合和部署,而 更新我們的 Travis 配置以使用 JDK 8 非常簡單。
當然,升級最有趣的方面是程式碼本身的更改。檢視拉取請求 #348 中的提交,您會看到更改分為幾個類別,包括使用 Lambda 表示式重構以及利用 JDK 8 強大的新 Stream API。
例如,對於一個非常簡單的例子,從這樣的程式碼
List<String> projectVersions = new ArrayList<>();
for (ProjectRelease projectRelease : project.getProjectReleases()) {
projectVersions.add(projectRelease.getVersion());
}
變成這樣很棒。
List<String> projectVersions = project.getProjectReleases().stream()
.map(ProjectRelease::getVersion)
.collect(Collectors.toList());
或者,在單元測試中,從繁瑣的
mockMvc.perform(createPostRequest)
.andExpect(new ResultMatcher() {
@Override
public void match(MvcResult result) {
String redirectedUrl = result.getResponse().getRedirectedUrl();
assertThat(redirectedUrl, startsWith("/admin/blog"));
}
});
到緊湊且易讀的
mockMvc.perform(createPostRequest)
.andExpect(result -> {
String redirectedUrl = result.getResponse().getRedirectedUrl();
assertThat(redirectedUrl, startsWith("/admin/blog"));
});
當然,您在上面看到的只是 JDK 8 中流、Lambda 表示式和方法引用可能實現的功能的冰山一角。有幾個新概念需要學習,但您會很高興自己做到了!為此,我們推薦閱讀 Venkat Subramanian 出色的《Java 中的函數語言程式設計》。
我們還可以進行額外的更改,以充分利用 JDK 8 提供的功能,其中包括將我們的 java.util.Date、java.util.Calendar 和 java.util.TimeZone 的使用轉換為 JDK 8 的新日期和時間 API。我們已經建立了問題 #360 來完成這項工作,如果您有興趣提供幫助,我們很樂意與您一起處理拉取請求。只需檢視貢獻者指南,並在該問題中留言告訴我們您有興趣。
無論如何,如果您一直好奇並想嘗試 JDK 8 中的新功能和 API,我們希望您會發現 Sagan 應用程式的這些更改是一個有用的參考。
注意:如果您已經本地檢出 Sagan 倉庫,您需要重新生成您的 IDE 專案元資料,以確保您正在正確地使用 1.8 級別的語言功能。專案維基已更新,以反映正確的此操作要求和步驟。
此外,為了更全面地瞭解 JDK 8 在語言和 API 級別上可用的功能,請務必檢視 Benjamin Winterberg 出色的Java 8 教程和Java SE 8 API 瀏覽器。
今年的 SpringOne 將於 9 月 8 日至 11 日在德克薩斯州達拉斯舉行,超早鳥票現已開放註冊。我們期待與您相見!