日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bootstrap样式异常_处理异常功能样式

發(fā)布時(shí)間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bootstrap样式异常_处理异常功能样式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

bootstrap樣式異常

Java從一開始就支持檢查異常。 在Java 8中,語言元素lambda和支持流操作的RT庫修改將功能編程風(fēng)格引入了該語言。 函數(shù)樣式和異常并不是真正的好朋友。 在本文中,我將描述一個(gè)簡單的庫,該庫在某種程度上類似于使用Optional處理null方式處理異常。

該庫有效(畢竟它是單個(gè)類和一些內(nèi)部類,但實(shí)際上不是很多)。 另一方面,我不是絕對確定使用該庫不會(huì)降低普通程序員的編程風(fēng)格。 有人用錘子把所有東西都看成是釘子,這可能會(huì)發(fā)生。 錘子不是很好的修腳工具。 看看這個(gè)庫更像是一個(gè)主意,而不是作為一個(gè)最終的工具來告訴您如何創(chuàng)建完美的代碼處理異常。

處理檢查的異常

已檢查的異常必須像感冒一樣被聲明或捕獲。 這是與null的主要區(qū)別。 評估表達(dá)式可以靜默為null但不能靜默引發(fā)已檢查的異常。 當(dāng)結(jié)果為null我們可以使用它來表示沒有值,或者我們可以檢查并使用“默認(rèn)”值代替null 。 這樣做的代碼模式是

var x = expression; if ( expression == null ){ x = expression that is really never null default expression that is really never }

模式表達(dá)式是相同的,盡管Java語法略有不同,但表達(dá)式的求值可以引發(fā)檢查的異常:

Type x; // you cannot use 'var' here try { x = expression } catch (Exception weHardlyEverUseThisValue){ x = expression that does not throw exception default expression that does not }

如果第二個(gè)表達(dá)式也可以為null或可能引發(fā)異常,則結(jié)構(gòu)可能更復(fù)雜,并且如果第一個(gè)表達(dá)式失敗,我們需要第三個(gè)表達(dá)式甚至更多個(gè)表達(dá)式進(jìn)行評估。 由于許多括號,在拋出異常的情況下,這尤其頑皮

Type x; // you cannot use 'var' here try { try { x = expression1 } catch (Exception e){ try { x = expression2 } catch (Exception e){ try { x = expression3 } catch (Exception e){ x = expression4 }}}} catch (Exception e){ x = expression that does not throw exception default expression that does not }

對于null處理,我們有Optional 。 解決百萬美元的問題并不是完美的,這是設(shè)計(jì)一種既沒null又被低估的語言的名稱,但是如果使用得當(dāng),它會(huì)使生活變得更好。 (更糟糕的是,如果使用錯(cuò)誤的方式,您可以隨意地說,我在本文中所描述的正是這種方式。)

如果結(jié)果表達(dá)式為null ,則可以編寫

var x = Optional.ofNullable(expresssion) .orElse( expression that does not throw exception); default expression that does not exception);

你也可以寫

var x = Optional.ofNullable(expresssion1) .or( () -> Optional.ofNullable(expression2)) .or( () -> Optional.ofNullable(expression3)) .or( () -> Optional.ofNullable(expression4)) ... .orElse( expression that does not throw exception); default expression that does not exception);

當(dāng)您有很多選擇的價(jià)值。 但是,如果表達(dá)式引發(fā)異常,則您不能做同樣的事情。 可以嗎

極好的

庫Exceptional ( https://github.com/verhas/exceptional )

< groupId >com.javax0</ groupId > < artifactId >exceptional</ artifactId > < version >1.0.0</ version >

實(shí)現(xiàn)了在Optional實(shí)現(xiàn)的所有方法,一個(gè)或多個(gè)實(shí)現(xiàn)了某些方法,并且某些方法的目的有所不同,旨在在異常情況下使用相同的方式,如上面針對null值的Optional 。

您可以使用Exceptional.of()或Exceptional.ofNullable()創(chuàng)建一個(gè)Exceptional值。 重要的區(qū)別在于,論點(diǎn)不是價(jià)值,而是提供價(jià)值的供應(yīng)商。 該供應(yīng)商不是JDK Supplier因?yàn)樵揝upplier無法引發(fā)異常,因此整個(gè)庫將無用。 此供應(yīng)商必須是Exceptional.ThrowingSupplier ,它與JDK Supplier完全相同,但get()方法可能會(huì)拋出Exception 。 (另請注意,只有一個(gè)Exception ,而不是Throwable正如你用裸手搭上了燒紅的鐵球,你應(yīng)該只捕捉盡可能頻繁。)

在這種情況下,您可以寫的是

var x = Exceptional.of(() -> expression) // you CAN use 'var' here .orElse( expression that does not throw exception); default expression that does not exception);

它越來越短,通常更易讀。 (或者不是?這就是為什么APL如此受歡迎?或者是?您問什么是APL?)

如果您有多種選擇,可以寫

var x = Exceptional.of(() -> expression1) // you CAN use 'var' here .or(() -> expression2) .or(() -> expression3) // these are also ThrowingSupplier expressions .or(() -> expression4) ... .orElse( expression that does not throw exception); default expression that does not exception);

如果某些供應(yīng)商可能會(huì)導(dǎo)致null不僅引發(fā)異常,則有方法的ofNullable()和orNullable()變體。 ( orNullable()在Optional中不存在,但在這里,如果整個(gè)庫都可以使用,則是有意義的。)

如果您熟悉Optional并使用更高級的方法,例如ifPresent() , ifPresentOrElse()或orElseThrow() , stream() , map() , flatMap() , filter()那么使用Exceptional并不困難。 類中存在具有相同名稱的類似方法。 再次不同的是,如果Optional的方法的參數(shù)為Function ,則為Exceptional時(shí)為ThrowingFunction 。 利用這種可能性,您可以編寫如下代碼

private int getEvenAfterOdd( int i) throws Exception { if ( i % 2 == 0 ){ throw new Exception(); } return 1 ; } @Test @DisplayName ( "some odd example" ) void testToString() { Assertions.assertEquals( "1" , Exceptional.of(() -> getEvenAfterOdd( 1 )) .map(i -> getEvenAfterOdd(i+ 1 )) .or( () -> getEvenAfterOdd( 1 )) .map(i -> i.toString()).orElse( "something" ) ); }

也可以像下面的示例一樣處理函數(shù)表達(dá)式中的異常:

private int getEvenAfterOdd( int i) throws Exception { if (i % 2 == 0 ) { throw new Exception(); } return 1 ; } @Test void avoidExceptionsForSuppliers() { Assertions.assertEquals( 14 , ( int ) Optional.of( ).map(i -> 13 ).map(i -> Exceptional.of(() -> inc(i)) .orElse( 0 )).orElse( 15 )); }

最后但并非最不重要的一點(diǎn)是,您可以模仿?. Groovy寫作的運(yùn)營商

abcdef

表達(dá)式(其中所有變量/字段都可能為null并通過它們訪問下一個(gè)字段)會(huì)導(dǎo)致NPE。 您可以但是寫

var x = Exceptional.ofNullable( () -> abcdef).orElse( null );

摘要

記得我告訴過你有關(guān)錘子的事。 小心使用,并獲得更大的利益。

翻譯自: https://www.javacodegeeks.com/2019/05/handling-exceptions-functional-style.html

bootstrap樣式異常

總結(jié)

以上是生活随笔為你收集整理的bootstrap样式异常_处理异常功能样式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。