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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_ro2CN3Fa ? 來(lái)源:芋道源碼 ? 2023-11-10 16:23 ? 次閱讀


在開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)使用if...else...進(jìn)行判斷拋出異常、分支處理等操作。這些if...else...充斥在代碼中嚴(yán)重影響了代碼代碼的美觀,這時(shí)我們可以利用Java 8Function接口來(lái)消滅if...else...

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

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

Function 函數(shù)式接口

使用注解@FunctionalInterface標(biāo)識(shí),并且只包含一個(gè)抽象方法的接口是函數(shù)式接口函數(shù)式接口主要分為Supplier供給型函數(shù)、Consumer消費(fèi)型函數(shù)、Runnable無(wú)參無(wú)返回型函數(shù)和Function有參有返回型函數(shù)。

Function可以看作轉(zhuǎn)換型函數(shù)

Supplier供給型函數(shù)

Supplier的表現(xiàn)形式為不接受參數(shù)、只返回?cái)?shù)據(jù)

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

Consumer消費(fèi)型函數(shù)

Consumer消費(fèi)型函數(shù)和Supplier剛好相反。Consumer接收一個(gè)參數(shù),沒(méi)有返回值

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

Runnable無(wú)參無(wú)返回型函數(shù)

Runnable的表現(xiàn)形式為即沒(méi)有參數(shù)也沒(méi)有返回值

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

Function函數(shù)的表現(xiàn)形式為接收一個(gè)參數(shù),并返回一個(gè)值。SupplierConsumerRunnable可以看作Function的一種特殊表現(xiàn)形式

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

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

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

使用小技巧

處理拋出異常的if

  1. 定義函數(shù)

定義一個(gè)拋出異常的形式的函數(shù)式接口, 這個(gè)接口只有參數(shù)沒(méi)有返回值是個(gè)消費(fèi)型接口

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

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

創(chuàng)建工具類VUtils并創(chuàng)建一個(gè)isTure方法,方法的返回值為剛才定義的函數(shù)式接口-ThrowExceptionFunctionThrowExceptionFunction的接口實(shí)現(xiàn)邏輯為當(dāng)參數(shù)btrue時(shí)拋出異常

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

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

調(diào)用工具類參數(shù)參數(shù)后,調(diào)用函數(shù)式接口throwMessage方法傳入異常信息。當(dāng)出入的參數(shù)為false時(shí)正常執(zhí)行

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

當(dāng)出入的參數(shù)為true時(shí)拋出異常

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

處理if分支操作

  1. 定義函數(shù)式接口

創(chuàng)建一個(gè)名為BranchHandle的函數(shù)式接口,接口的參數(shù)為兩個(gè)Runnable接口。這兩個(gè)兩個(gè)Runnable接口分別代表了為truefalse時(shí)要進(jìn)行的操作

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

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

}
  1. 編寫判斷方法

創(chuàng)建一個(gè)名為isTureOrFalse的方法,方法的返回值為剛才定義的函數(shù)式接口-BranchHandle

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

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

參數(shù)為true時(shí),執(zhí)行trueHandle

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

參數(shù)為false時(shí),執(zhí)行falseHandle

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

如果存在值執(zhí)行消費(fèi)操作,否則執(zhí)行基于空的操作

  1. 定義函數(shù)

創(chuàng)建一個(gè)名為PresentOrElseHandler的函數(shù)式接口,接口的參數(shù)一個(gè)為Consumer接口。一個(gè)為Runnable,分別代表值不為空時(shí)執(zhí)行消費(fèi)操作和值為空時(shí)執(zhí)行的其他操作

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

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

}
  1. 編寫判斷方法

創(chuàng)建一個(gè)名為isBlankOrNoBlank的方法,方法的返回值為剛才定義的函數(shù)式接口-PresentOrElseHandler

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

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

調(diào)用工具類參數(shù)參數(shù)后,調(diào)用函數(shù)式接口presentOrElseHandle方法傳入一個(gè)ConsumerRunnable

參數(shù)不為空時(shí),打印參數(shù)

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

參數(shù)不為空時(shí)

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


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2983

    瀏覽量

    106493
  • 參數(shù)
    +關(guān)注

    關(guān)注

    11

    文章

    1865

    瀏覽量

    32770
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4365

    瀏覽量

    63841

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

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    消滅 Java 代碼的“壞味道”

    (list.get(list.size() - 1));} else { // 內(nèi)部可能是鏈表實(shí)現(xiàn),隨機(jī)訪問(wèn)效率低}1.7.頻繁調(diào)用 Collection.contains 方法請(qǐng)使用 Set在 java 集合
    發(fā)表于 09-16 15:03

    消滅EMC三大利器的原理

    來(lái)源:互聯(lián)網(wǎng)濾波電容器、共模電感、磁珠在 EMC 設(shè)計(jì)電路是常見(jiàn)的身影,也是消滅電磁干擾的三大利器。文章從設(shè)計(jì)詳細(xì)分析了消滅 EMC 三大利器的原理。
    發(fā)表于 10-22 08:55

    S參數(shù)在高頻測(cè)量妙用

    S參數(shù)在高頻測(cè)量妙用在個(gè)人計(jì)算機(jī)平臺(tái)邁入 GHz階段之后,從計(jì)算機(jī)的中央處理器、顯示界面、存儲(chǔ)器總線到I/O接口,全部走入高頻傳送的國(guó)度,于是高
    發(fā)表于 07-23 11:26 ?2568次閱讀

    Java包、接口與異常處理(exception) 實(shí)驗(yàn)

    實(shí)驗(yàn) 4 包、接口與異常處理(exception) 一、實(shí)驗(yàn)?zāi)康?    了解 Java 包(package)、接口(interface)和異常處理(e
    發(fā)表于 09-23 19:00 ?1261次閱讀

    java8新特性

    java8接口聲明添加非抽象方法的實(shí)現(xiàn),也成為拓展方法。
    發(fā)表于 11-27 15:54 ?1795次閱讀

    非常新手之430單片機(jī)

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

    利用Java 8Function接口來(lái)消滅if...else

    在開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)使用if...else...進(jìn)行判斷拋出異常、分支處理等操作。這些if...else...充斥在代碼嚴(yán)重影響了代碼代碼的美觀,這時(shí)我們可以利用Java
    的頭像 發(fā)表于 04-21 10:23 ?2881次閱讀

    JAVA8提供了Optional類來(lái)優(yōu)化這種寫法

    這種寫法是比較丑陋的,為了避免上述丑陋的寫法,讓丑陋的設(shè)計(jì)變得優(yōu)雅。JAVA8提供了Optional類來(lái)優(yōu)化這種寫法,接下來(lái)的正文部分進(jìn)行詳細(xì)說(shuō)明
    的頭像 發(fā)表于 04-24 15:18 ?1245次閱讀

    Java方法調(diào)用Lua function

    Java先載入login.lua腳本并編譯,然后再獲取指定名稱的函數(shù),無(wú)參的直接使用call()方法調(diào)用,帶參的需要通過(guò)invoke(LuaValue[])傳入?yún)?shù)表。
    的頭像 發(fā)表于 09-07 10:47 ?1577次閱讀

    關(guān)于Python的“for-else”功能

    無(wú)論使用哪種編程語(yǔ)言,我們都會(huì)編寫“if-else”語(yǔ)句,但是“for-else”呢?
    發(fā)表于 09-26 14:44 ?639次閱讀

    在Pythonif...else條件語(yǔ)句介紹

    在 Python if...else 是一種條件語(yǔ)句,可以根據(jù)給定的條件執(zhí)行不同的操作。這個(gè)語(yǔ)句通常用于控制程序的流程。
    的頭像 發(fā)表于 04-19 15:43 ?1393次閱讀

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

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

    磁環(huán)在EMC妙用

    磁環(huán)在EMC妙用
    的頭像 發(fā)表于 11-27 14:48 ?1108次閱讀
    磁環(huán)在EMC<b class='flag-5'>中</b>的<b class='flag-5'>妙用</b>

    電容在ESD測(cè)試整改妙用

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

    verilogfunction和task的區(qū)別

    在VerilogFunction和Task是用于模塊化設(shè)計(jì)和重用代碼的兩種重要元素。它們?cè)试S開(kāi)發(fā)人員將復(fù)雜的操作分解為更小的功能單元,并在需要時(shí)調(diào)用它們。雖然Function和Task在某些方面
    的頭像 發(fā)表于 02-22 15:40 ?2309次閱讀
    主站蜘蛛池模板: 欧美黄色免费网址 | 天堂成人在线观看 | 五月婷婷在线视频观看 | 一级一级特黄女人精品毛片 | 亚洲 [12p] | 国产成人三级视频在线观看播放 | 国产大片黄在线观看 | 狠狠色噜噜狠狠狠狠888奇米 | 色视频免费国产观看 | 国产女同视频 | 欧美人与动性视频在线观 | 激情五月五月婷婷 | 亚洲成人免费在线 | 久久久综合久久 | 777奇米影视笫四色88me久久综合 | 开心激情播播网 | 又黄又爽又猛午夜性色播在线播放 | 免费能看的黄色网址 | 国产亚洲午夜精品a一区二区 | 国产高清色视频免费看的网址 | 国内精品视频在线 | 在线看片你懂得 | 色多多高清在线观看视频www | 你懂的手机在线 | 午夜免费理论片在线看 | 黑色丝袜在丝袜福利国产 | 99午夜高清在线视频在观看 | 视频在线高清完整免费观看 | 毛片基地在线 | 欧美性生活网站 | 又粗又大的机巴好爽欧美 | 欧美成人看片一区二区三区 | 看片地址 | 69日本xxxhd| 久久夜色撩人精品国产 | 国产精品嫩草影院一二三区 | 黄色一级毛片网站 | 久久99热精品免费观看k影院 | 98色花堂国产第一页 | 天堂网最新版www中文 | 欧美大狠狠大臿蕉香蕉大视频 |