早期更多失败– Java 8
快速失敗或早期失敗是一種軟件工程概念,旨在通過(guò)在不應(yīng)該發(fā)生的事情發(fā)生時(shí)立即停止執(zhí)行來(lái)防止復(fù)雜問(wèn)題的發(fā)生。 在之前的博客文章和演示中,我將詳細(xì)介紹這種方法的優(yōu)點(diǎn),在此博客文章中,我將詳細(xì)介紹Java 8中該思想的另一種用法。
在Java中,由Collection類(lèi)(例如ArrayList,HashSet,Vector等)返回的迭代器快速失敗。 這意味著,如果您在迭代時(shí)嘗試從基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)中添加()或remove(),則會(huì)收到ConcurrentModificationException。 讓我們來(lái)看看:
在Java 8u20中,Collections.sort()API也會(huì)快速失敗。 這意味著您也不能在迭代內(nèi)調(diào)用它。 例如:
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 }這很有道理。 遍歷數(shù)據(jù)結(jié)構(gòu)并在迭代過(guò)程中對(duì)其進(jìn)行排序不僅是反直觀的,而且還可能導(dǎo)致不可預(yù)測(cè)的結(jié)果。 現(xiàn)在,您可以解決此問(wèn)題,如果您在排序調(diào)用后立即中斷,就不會(huì)獲得異常。
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。 但是,如果遇到問(wèn)題,只需在迭代之外進(jìn)行排序
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 }或使用添加時(shí)排序的數(shù)據(jù)結(jié)構(gòu)。
Java 8版本20中引入了Collections.sort()API的這一新行為。 值得看一下詳細(xì)介紹API更改的特定部分:
”
區(qū)域 :core-libs / java.util.collections
簡(jiǎn)介 :Collection.sort推遲到List.sort
以前, Collection.sort復(fù)制列表中的元素以將其排序到一個(gè)數(shù)組中,對(duì)該數(shù)組進(jìn)行排序,然后使用數(shù)組中的這些元素和默認(rèn)方法在適當(dāng)?shù)奈恢酶铝斜怼?
List.sort推遲到Collection.sort。 這是非最佳的安排。
從8u20版本開(kāi)始, Collection.sort推遲到List.sort 。 這意味著,例如,使用ArrayList實(shí)例調(diào)用Collection.sort現(xiàn)有代碼現(xiàn)在將使用ArrayList實(shí)現(xiàn)的最佳排序。
”
我認(rèn)為,如果Oracle在此方面更明確地說(shuō)明這種更改如何引起運(yùn)行時(shí)問(wèn)題,那將有所幫助。 考慮到每個(gè)人都使用Collections框架,如果以前沒(méi)有拋出異常的API現(xiàn)在可以在相同的情況下使用(錯(cuò)誤代碼及其全部?jī)?nèi)容),那么發(fā)行說(shuō)明使開(kāi)發(fā)人員更容易找到信息會(huì)更好。
翻譯自: https://www.javacodegeeks.com/2017/11/fail-early-java-8.html
總結(jié)
以上是生活随笔為你收集整理的早期更多失败– Java 8的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 公司印鉴备案回执单在哪补办(公司印鉴备案
- 下一篇: ddos攻击工具(手机ddos攻防工具)