在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

妙用Java 8中的 Function接口,消滅if...else(非常新穎的寫法)

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-11-10 16:23 ? 次閱讀


在開發過程中經常會使用if...else...進行判斷拋出異常、分支處理等操作。這些if...else...充斥在代碼中嚴重影響了代碼代碼的美觀,這時我們可以利用Java 8Function接口來消滅if...else...。

if(...){
thrownewRuntimeException("出現異常了");
}

if(...){
doSomething();
}else{
doOther();
}

Function 函數式接口

使用注解@FunctionalInterface標識,并且只包含一個抽象方法的接口是函數式接口。函數式接口主要分為Supplier供給型函數、Consumer消費型函數、Runnable無參無返回型函數和Function有參有返回型函數。

Function可以看作轉換型函數

Supplier供給型函數

Supplier的表現形式為不接受參數、只返回數據

9b94ce8c-7f69-11ee-939d-92fbcf53809c.jpg

Consumer消費型函數

Consumer消費型函數和Supplier剛好相反。Consumer接收一個參數,沒有返回值

9ba12010-7f69-11ee-939d-92fbcf53809c.jpg

Runnable無參無返回型函數

Runnable的表現形式為即沒有參數也沒有返回值

9bc18c2e-7f69-11ee-939d-92fbcf53809c.jpg

Function函數的表現形式為接收一個參數,并返回一個值。Supplier、ConsumerRunnable可以看作Function的一種特殊表現形式

9bcdee92-7f69-11ee-939d-92fbcf53809c.jpg

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

使用小技巧

處理拋出異常的if

  1. 定義函數

定義一個拋出異常的形式的函數式接口, 這個接口只有參數沒有返回值是個消費型接口

/**
*拋異常接口
**/
@FunctionalInterface
publicinterfaceThrowExceptionFunction{

/**
*拋出異常信息
*
*@parammessage異常信息
*@returnvoid
**/
voidthrowMessage(Stringmessage);
}
  1. 編寫判斷方法

創建工具類VUtils并創建一個isTure方法,方法的返回值為剛才定義的函數式接口-ThrowExceptionFunction。ThrowExceptionFunction的接口實現邏輯為當參數btrue時拋出異常

/**
*如果參數為true拋出異常
*
*@paramb
*@returncom.example.demo.func.ThrowExceptionFunction
**/
publicstaticThrowExceptionFunctionisTure(booleanb){

return(errorMessage)->{
if(b){
thrownewRuntimeException(errorMessage);
}
};
}
  1. 使用方式

調用工具類參數參數后,調用函數式接口throwMessage方法傳入異常信息。當出入的參數為false時正常執行

9bded234-7f69-11ee-939d-92fbcf53809c.jpg

當出入的參數為true時拋出異常

9beeae8e-7f69-11ee-939d-92fbcf53809c.jpg

處理if分支操作

  1. 定義函數式接口

創建一個名為BranchHandle的函數式接口,接口的參數為兩個Runnable接口。這兩個兩個Runnable接口分別代表了為truefalse時要進行的操作

/**
*分支處理接口
**/
@FunctionalInterface
publicinterfaceBranchHandle{

/**
*分支操作
*
*@paramtrueHandle為true時要進行的操作
*@paramfalseHandle為false時要進行的操作
*@returnvoid
**/
voidtrueOrFalseHandle(RunnabletrueHandle,RunnablefalseHandle);

}
  1. 編寫判斷方法

創建一個名為isTureOrFalse的方法,方法的返回值為剛才定義的函數式接口-BranchHandle。

/**
*參數為true或false時,分別進行不同的操作
*
*@paramb
*@returncom.example.demo.func.BranchHandle
**/
publicstaticBranchHandleisTureOrFalse(booleanb){

return(trueHandle,falseHandle)->{
if(b){
trueHandle.run();
}else{
falseHandle.run();
}
};
}
  1. 使用方式

參數為true時,執行trueHandle

9bff7a70-7f69-11ee-939d-92fbcf53809c.jpg

參數為false時,執行falseHandle

9c0a3da2-7f69-11ee-939d-92fbcf53809c.jpg

如果存在值執行消費操作,否則執行基于空的操作

  1. 定義函數

創建一個名為PresentOrElseHandler的函數式接口,接口的參數一個為Consumer接口。一個為Runnable,分別代表值不為空時執行消費操作和值為空時執行的其他操作

/**
*空值與非空值分支處理
*/
publicinterfacePresentOrElseHandler<TextendsObject>{

/**
*值不為空時執行消費操作
*值為空時執行其他的操作
*
*@paramaction值不為空時,執行的消費操作
*@paramemptyAction值為空時,執行的操作
*@returnvoid
**/
voidpresentOrElseHandle(ConsumersuperT>action,RunnableemptyAction);

}
  1. 編寫判斷方法

創建一個名為isBlankOrNoBlank的方法,方法的返回值為剛才定義的函數式接口-PresentOrElseHandler。

/**
*參數為true或false時,分別進行不同的操作
*
*@paramb
*@returncom.example.demo.func.BranchHandle
**/
publicstaticPresentOrElseHandlerisBlankOrNoBlank(Stringstr){

return(consumer,runnable)->{
if(str==null||str.length()==0){
runnable.run();
}else{
consumer.accept(str);
}
};
}
  1. 使用方式

調用工具類參數參數后,調用函數式接口presentOrElseHandle方法傳入一個ConsumerRunnable

參數不為空時,打印參數

9c1ba72c-7f69-11ee-939d-92fbcf53809c.jpg

參數不為空時

9c2cf022-7f69-11ee-939d-92fbcf53809c.jpg


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2970

    瀏覽量

    104838
  • 參數
    +關注

    關注

    11

    文章

    1838

    瀏覽量

    32280
  • 函數
    +關注

    關注

    3

    文章

    4333

    瀏覽量

    62723

原文標題:妙用Java 8中的 Function接口,消滅if...else(非常新穎的寫法)

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    消滅 Java 代碼的“壞味道”

    (list.get(list.size() - 1));} else { // 內部可能是鏈表實現,隨機訪問效率低}1.7.頻繁調用 Collection.contains 方法請使用 Set在 java 集合
    發表于 09-16 15:03

    消滅EMC三大利器的原理

    來源:互聯網濾波電容器、共模電感、磁珠在 EMC 設計電路是常見的身影,也是消滅電磁干擾的三大利器。文章從設計詳細分析了消滅 EMC 三大利器的原理。
    發表于 10-22 08:55

    S參數在高頻測量妙用

    S參數在高頻測量妙用在個人計算機平臺邁入 GHz階段之后,從計算機的中央處理器、顯示界面、存儲器總線到I/O接口,全部走入高頻傳送的國度,于是高
    發表于 07-23 11:26 ?2372次閱讀

    Java包、接口與異常處理(exception) 實驗

    實驗 4 包、接口與異常處理(exception) 一、實驗目的     了解 Java 包(package)、接口(interface)和異常處理(e
    發表于 09-23 19:00 ?1204次閱讀

    java8新特性

    java8接口聲明添加非抽象方法的實現,也成為拓展方法。
    發表于 11-27 15:54 ?1744次閱讀

    非常新手之430單片機

    非常新手之430單片機(單片機課程設計電子密碼鎖)-文檔為非常新手之430單片機講解文檔,是一份不錯的參考資料,感興趣的可以下載看看,,,,,,,,,,,,,,
    發表于 09-30 11:04 ?2次下載
    <b class='flag-5'>非常新</b>手之430單片機

    利用Java 8Function接口消滅if...else

    在開發過程中經常會使用if...else...進行判斷拋出異常、分支處理等操作。這些if...else...充斥在代碼嚴重影響了代碼代碼的美觀,這時我們可以利用Java
    的頭像 發表于 04-21 10:23 ?2706次閱讀

    JAVA8提供了Optional類來優化這種寫法

    這種寫法是比較丑陋的,為了避免上述丑陋的寫法,讓丑陋的設計變得優雅。JAVA8提供了Optional類來優化這種寫法,接下來的正文部分進行詳細說明
    的頭像 發表于 04-24 15:18 ?1093次閱讀

    Java方法調用Lua function

    Java先載入login.lua腳本并編譯,然后再獲取指定名稱的函數,無參的直接使用call()方法調用,帶參的需要通過invoke(LuaValue[])傳入參數表。
    的頭像 發表于 09-07 10:47 ?1416次閱讀

    關于Python的“for-else”功能

    無論使用哪種編程語言,我們都會編寫“if-else”語句,但是“for-else”呢?
    發表于 09-26 14:44 ?552次閱讀

    在Pythonif...else條件語句介紹

    在 Python ,if...else 是一種條件語句,可以根據給定的條件執行不同的操作。這個語句通常用于控制程序的流程。
    的頭像 發表于 04-19 15:43 ?1190次閱讀

    如何解決冗長的if...else條件判斷(上)

    if...else...條件語句我相信學習python的童鞋們都喜歡用,例如下一面這一段 def func ( param ): if param == "cat" : print ( "這是一只
    的頭像 發表于 09-12 17:03 ?698次閱讀

    磁環在EMC妙用

    磁環在EMC妙用
    的頭像 發表于 11-27 14:48 ?843次閱讀
    磁環在EMC<b class='flag-5'>中</b>的<b class='flag-5'>妙用</b>

    電容在ESD測試整改妙用

    電容在ESD測試整改妙用
    的頭像 發表于 12-07 09:44 ?680次閱讀
    電容在ESD測試整改<b class='flag-5'>中</b>的<b class='flag-5'>妙用</b>

    verilogfunction和task的區別

    在Verilog,Function和Task是用于模塊化設計和重用代碼的兩種重要元素。它們允許開發人員將復雜的操作分解為更小的功能單元,并在需要時調用它們。雖然Function和Task在某些方面
    的頭像 發表于 02-22 15:40 ?1928次閱讀
    主站蜘蛛池模板: 色福利视频| 亚洲特级aaaaaa毛片| 国产精品网站在线进入| 日本加勒比高清一本大道| 天天干天天综合| 全免费一级毛片在线播放| 加勒比啪啪| 日本xxxx69日本| 又粗又大撑满了好爽| 午夜dy888理论在线播放| 免费看的黄网站| 一级特黄aa大片免费播放视频| 性色在线播放| 日韩系列| 久久青草免费免费91线频观看| 国产小视频你懂的| 亚洲最新黄色网址| 免费又黄又爽1000禁片| vip免费观看| 同性恋激情视频| 亚洲香蕉网久久综合影院3p| 色图视频| 久久免费手机视频| 在线午夜| 最新理论三级中文在线观看| 中文字幕亚洲天堂| 色多多18免费观看| 狠狠丁香激情久久综合| 中文天堂最新版www官网在线| 人人干人人艹| 国产黄色视屏| 一级毛片a| 欧美性free| 94在线| 狠狠干天天操| 日本毛片大全| 特色毛片| 国模网站| 美女视频久久| 亚洲 欧美 中文字幕| 四虎最新影院|