早期更多失败– Java 8
快速失敗或早期失敗是一種軟件工程概念,旨在通過在不應該發生的事情發生時立即停止執行來防止復雜問題的發生。 在之前的博客文章和演示中,我將詳細介紹這種方法的優點,在此博客文章中,我將詳細介紹Java 8中該思想的另一種用法。
在Java中,由Collection類(例如ArrayList,HashSet,Vector等)返回的迭代器快速失敗。 這意味著,如果您在迭代時嘗試從基礎數據結構中添加()或remove(),則會收到ConcurrentModificationException。 讓我們來看看:
在Java 8u20中,Collections.sort()API也會快速失敗。 這意味著您也不能在迭代內調用它。 例如:
import static java.util.Arrays.asList; List ints = new ArrayList<>(asList(1,2,3,4,5,6,9,15,67,23,22,3,1,4,2));for (Integer i: ints) {// some codeCollections.sort(ints); // throws java.util.ConcurrentModificationException }這很有道理。 遍歷數據結構并在迭代過程中對其進行排序不僅是反直觀的,而且還可能導致不可預測的結果。 現在,您可以解決此問題,如果您在排序調用后立即中斷,就不會獲得異常。
import static java.util.Arrays.asList; List ints = new ArrayList<>(asList(1,2,3,4,5,6,9,15,67,23,22,3,1,4,2));for (Integer i: ints) {// some codeCollections.sort(ints); // throws java.util.ConcurrentModificationExceptionbreak; }但是,這幾乎不是很棒的代碼。 嘗試避免使用舊的skool迭代,并盡可能使用Lambda。 但是,如果遇到問題,只需在迭代之外進行排序
import static java.util.Arrays.asList; List ints = new ArrayList<>(asList(1,2,3,4,5,6,9,15,67,23,22,3,1,4,2)); Collections.sort(ints);for (Integer i: ints) {// some code }或使用添加時排序的數據結構。
Java 8版本20中引入了Collections.sort()API的這一新行為。 值得看一下詳細介紹API更改的特定部分:
”
區域 :core-libs / java.util.collections
簡介 :Collection.sort推遲到List.sort
以前, Collection.sort復制列表中的元素以將其排序到一個數組中,對該數組進行排序,然后使用數組中的這些元素和默認方法在適當的位置更新列表。
List.sort推遲到Collection.sort。 這是非最佳的安排。
從8u20版本開始, Collection.sort推遲到List.sort 。 這意味著,例如,使用ArrayList實例調用Collection.sort現有代碼現在將使用ArrayList實現的最佳排序。
”
我認為,如果Oracle在此方面更明確地說明這種更改如何引起運行時問題,那將有所幫助。 考慮到每個人都使用Collections框架,如果以前沒有拋出異常的API現在可以在相同的情況下使用(錯誤代碼及其全部內容),那么發行說明使開發人員更容易找到信息會更好。
翻譯自: https://www.javacodegeeks.com/2017/11/fail-early-java-8.html
總結
以上是生活随笔為你收集整理的早期更多失败– Java 8的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公司印鉴备案回执单在哪补办(公司印鉴备案
- 下一篇: Java 9概览