在開發過程中經常會使用if...else...
進行判斷拋出異常、分支處理等操作。這些if...else...
充斥在代碼中嚴重影響了代碼代碼的美觀,這時我們可以利用Java 8
的Function
接口來消滅if...else...
。
if(...){
thrownewRuntimeException("出現異常了");
}
if(...){
doSomething();
}else{
doOther();
}
Function
函數式接口
使用注解@FunctionalInterface
標識,并且只包含一個抽象方法
的接口是函數式接口
。函數式接口
主要分為Supplier
供給型函數、Consumer
消費型函數、Runnable
無參無返回型函數和Function
有參有返回型函數。
Function
可以看作轉換型函數
Supplier
供給型函數
Supplier
的表現形式為不接受參數、只返回數據
Consumer
消費型函數
Consumer
消費型函數和Supplier
剛好相反。Consumer
接收一個參數,沒有返回值
Runnable
無參無返回型函數
Runnable
的表現形式為即沒有參數也沒有返回值
Function
函數的表現形式為接收一個參數,并返回一個值。Supplier
、Consumer
和Runnable
可以看作Function
的一種特殊表現形式
基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
- 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 視頻教程:https://doc.iocoder.cn/video/
使用小技巧
處理拋出異常的if
- 定義函數
定義一個拋出異常的形式的函數式接口
, 這個接口只有參數沒有返回值是個消費型接口
/**
*拋異常接口
**/
@FunctionalInterface
publicinterfaceThrowExceptionFunction{
/**
*拋出異常信息
*
*@parammessage異常信息
*@returnvoid
**/
voidthrowMessage(Stringmessage);
}
- 編寫判斷方法
創建工具類VUtils
并創建一個isTure
方法,方法的返回值為剛才定義的函數式接口
-ThrowExceptionFunction
。ThrowExceptionFunction
的接口實現邏輯為當參數b
為true
時拋出異常
/**
*如果參數為true拋出異常
*
*@paramb
*@returncom.example.demo.func.ThrowExceptionFunction
**/
publicstaticThrowExceptionFunctionisTure(booleanb){
return(errorMessage)->{
if(b){
thrownewRuntimeException(errorMessage);
}
};
}
- 使用方式
調用工具類參數參數后,調用函數式接口
的throwMessage
方法傳入異常信息。當出入的參數為false
時正常執行
當出入的參數為true
時拋出異常
處理if分支操作
- 定義函數式接口
創建一個名為BranchHandle
的函數式接口,接口的參數為兩個Runnable
接口。這兩個兩個Runnable
接口分別代表了為true
或false
時要進行的操作
/**
*分支處理接口
**/
@FunctionalInterface
publicinterfaceBranchHandle{
/**
*分支操作
*
*@paramtrueHandle為true時要進行的操作
*@paramfalseHandle為false時要進行的操作
*@returnvoid
**/
voidtrueOrFalseHandle(RunnabletrueHandle,RunnablefalseHandle);
}
- 編寫判斷方法
創建一個名為isTureOrFalse
的方法,方法的返回值為剛才定義的函數式接口
-BranchHandle
。
/**
*參數為true或false時,分別進行不同的操作
*
*@paramb
*@returncom.example.demo.func.BranchHandle
**/
publicstaticBranchHandleisTureOrFalse(booleanb){
return(trueHandle,falseHandle)->{
if(b){
trueHandle.run();
}else{
falseHandle.run();
}
};
}
- 使用方式
參數為true
時,執行trueHandle
參數為false
時,執行falseHandle
如果存在值執行消費操作,否則執行基于空的操作
- 定義函數
創建一個名為PresentOrElseHandler
的函數式接口,接口的參數一個為Consumer
接口。一個為Runnable
,分別代表值不為空時執行消費操作和值為空時執行的其他操作
/**
*空值與非空值分支處理
*/
publicinterfacePresentOrElseHandler<TextendsObject>{
/**
*值不為空時執行消費操作
*值為空時執行其他的操作
*
*@paramaction值不為空時,執行的消費操作
*@paramemptyAction值為空時,執行的操作
*@returnvoid
**/
voidpresentOrElseHandle(Consumer?superT>action,RunnableemptyAction);
}
- 編寫判斷方法
創建一個名為isBlankOrNoBlank
的方法,方法的返回值為剛才定義的函數式接口
-PresentOrElseHandler
。
/**
*參數為true或false時,分別進行不同的操作
*
*@paramb
*@returncom.example.demo.func.BranchHandle
**/
publicstaticPresentOrElseHandler>isBlankOrNoBlank(Stringstr){
return(consumer,runnable)->{
if(str==null||str.length()==0){
runnable.run();
}else{
consumer.accept(str);
}
};
}
- 使用方式
調用工具類參數參數后,調用函數式接口
的presentOrElseHandle
方法傳入一個Consumer
和Runnable
參數不為空時,打印參數
參數不為空時
-
JAVA
+關注
關注
19文章
2966瀏覽量
104707 -
參數
+關注
關注
11文章
1832瀏覽量
32197 -
函數
+關注
關注
3文章
4329瀏覽量
62576
原文標題:妙用Java 8中的 Function接口,消滅if...else(非常新穎的寫法)
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論