色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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函數的表現形式為接收一個參數,并返回一個值。SupplierConsumerRunnable可以看作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方法,方法的返回值為剛才定義的函數式接口-ThrowExceptionFunctionThrowExceptionFunction的接口實現邏輯為當參數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

    文章

    2966

    瀏覽量

    104707
  • 參數
    +關注

    關注

    11

    文章

    1832

    瀏覽量

    32197
  • 函數
    +關注

    關注

    3

    文章

    4329

    瀏覽量

    62576

原文標題:妙用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 ?2356次閱讀

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

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

    java8新特性

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

    非常新手之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 ?2675次閱讀

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

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

    Java方法調用Lua function

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

    關于Python的“for-else”功能

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

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

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

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

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

    磁環在EMC妙用

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

    電容在ESD測試整改妙用

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

    verilogfunction和task的區別

    在Verilog,Function和Task是用于模塊化設計和重用代碼的兩種重要元素。它們允許開發人員將復雜的操作分解為更小的功能單元,并在需要時調用它們。雖然Function和Task在某些方面
    的頭像 發表于 02-22 15:40 ?1886次閱讀
    主站蜘蛛池模板: 伊人久久综合网站| 男人扒开添女人下部口述| 国产精品一库二库三库| YIN荡的老师系列第6部分视频| 最新 国产 精品 精品 视频| 一本道亚洲区免费观看| 亚洲精品日韩在线观看视频| 午夜伦理伦理片在线观| 香蕉免费高清完整| 国产AV精品久久久免费看| 背着老婆爆操性感小姨子| SM调教贱屁股眼哭叫求饶H| CHINA学生白嫩| xnxx高中生| 东北成人社区| 国产AV精品白浆一区二| 国产精品伦一区二区三级视频| 征服艳妇后宫春色| 中文字幕视频在线免费观看| 综合色一色综合久久网vr | 国产亚洲免费观看| 国产偷抇久久精品A片蜜臀AV| 国产永久免费高清在线观看| 花蝴蝶高清影视视频在线播放| 久久福利影院| 嫩草影院成人| 视频一区在线免费观看| 亚洲AV无码乱码A片无码蜜桃| 亚洲AV久久婷婷蜜臀无码不卡| 亚洲欧美精品无码一区二在线| 亚洲色欲色欲www474ee| 在线视频av大全色久久| 99久久99久久久99精品齐| 爆操大胸美女| 国产人妖一区二区| 久久国内精品| 欧美人xxxxx| 性直播免费| 中国毛片网| 草莓视频在线观看完整高清免费 | 一级毛片免费视频网站|