色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美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次閱讀
    主站蜘蛛池模板: 麻豆AV蜜桃AV久久| 秋霞成人午夜鲁丝一区二区三区| 国产欧美精品一区二区色综合 | 蜜臀色欲AV无人A片一区| 免费国产足恋网站| 日本高清色片| 性欧美FREE少妇XXX| 亚洲免费无码av线观看| 中字幕视频在线永久在线观看免费| 99久久国产露脸精品国产吴梦梦 | 亚洲中文字幕永久在线全国| 中国videos1314tv| 拔萝卜视频免费看高清| 国产精品涩涩涩视频网站| 精品无人区一区二区三区| 男人桶女人j的视频在线观看| 日日操日日射| 亚洲黄色在线视频| 中文字幕视频在线观看| 成年人免费在线视频观看| 含羞草影院AE在线观看| 免费视频精品38| 婷婷精品国产亚洲AV在线观看| 伊人影院网| 成人国内精品久久久久影院| 国产中文字幕乱码免费| 暖暖 视频 在线 观看 高清| 无限资源在线观看8| 中国xxxxxz| 国产成人在线免费观看| 快穿女主有名器的H纯肉黄暴拉文 快插我我好湿啊公交车上做 | 乡村教师电影版| 4399亚洲AV无码V无码网站| 国产AV精品久久久毛片| 久久香蕉国产线看观看首页| 日本一本道高清码v| 一本之道高清在线3线观看| 村妇偷人内射高潮迭起| 久久精品国产亚洲AV天美18| 色多多污污在线播放免费| 伊人国产视频|