---
在開發程序中經常會使用 if...else... 進行判斷拋出例外、分支處理等操作,這些 if...else... 充斥在代碼中嚴重影響了代碼代碼的美觀,這時我們可以利用Java 8的Function介面來消滅 if...else... ,
if (...){
throw new RuntimeException("出現例外了");
}
if (...){
doSomething();
} else {
doOther();
}
Function 函式式介面
使用注解 @FunctionalInterface 標識,并且只包含一個 抽象方法 的介面是 函式式介面 , 函式式介面 主要分為 Supplier 供給型函式、 Consumer 消費型函式、 Runnable 無參無回傳型函式和 Function 有參有回傳型函式,
Function 可以看作轉換型函式
Supplier 供給型函式
Supplier 的表現形式為不接受引數、只回傳資料

Consumer 消費型函式
Consumer 消費型函式和 Supplier 剛好相反, Consumer 接收一個引數,沒有回傳值

Runnable 無參無回傳型函式
Runnable 的表現形式為即沒有引數也沒有回傳值 . 搜索公縱號: MarkerHub ,關注回復[ vue ]獲取 前后端入門教程 !

Function 函式的表現形式為接收一個引數,并回傳一個值, Supplier 、 Consumer 和 Runnable 可以看作 Function 的一種特殊表現形式

使用小技巧
處理拋出例外的 if
-
定義函式
定義一個拋出例外的形式的 函式式介面 , 這個介面只有引數沒有回傳值是個 消費型介面
/**
* 拋例外介面
**/
@FunctionalInterface
public interface ThrowExceptionFunction {
/**
* 拋出例外資訊
*
* @param message 例外資訊
* @return void
**/
void throwMessage(String message);
}
-
撰寫判斷方法
創建工具類 VUtils 并創建一個 isTure 方法,方法的回傳值為剛才定義的 函式式介面 - ThrowExceptionFunction , ThrowExceptionFunction 的介面實作邏輯為當引數 b 為 true 時拋出例外
/**
* 如果引數為true拋出例外
*
* @param b
* @return com.example.demo.func.ThrowExceptionFunction
**/
public static ThrowExceptionFunction isTure(boolean b){
return (errorMessage) -> {
if (b){
throw new RuntimeException(errorMessage);
}
};
}
-
使用方式
呼叫工具類引數引數后,呼叫 函式式介面 的 throwMessage 方法傳入例外資訊,當出入的引數為 false 時正常執行

當出入的引數為 true 時拋出例外

處理 if 分支操作
-
定義函式式介面
創建一個名為 BranchHandle 的函式式介面,介面的引數為兩個 Runnable 介面,這兩個兩個 Runnable 介面分別代表了為 true 或 false 時要進行的操作
/**
* 分支處理介面
**/
@FunctionalInterface
public interface BranchHandle {
/**
* 分支操作
*
* @param trueHandle 為true時要進行的操作
* @param falseHandle 為false時要進行的操作
* @return void
**/
void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);
}
-
撰寫判斷方法
創建一個名為 isTureOrFalse 的方法,方法的回傳值為剛才定義的 函式式介面 - BranchHandle,
/**
* 引數為true或false時,分別進行不同的操作
*
* @param b
* @return com.example.demo.func.BranchHandle
**/
public static BranchHandle isTureOrFalse(boolean b){
return (trueHandle, falseHandle) -> {
if (b){
trueHandle.run();
} else {
falseHandle.run();
}
};
}
-
使用方式
引數為 true 時,執行 trueHandle

引數為 false 時,執行 falseHandle

如果存在值執行消費操作,否則執行基于空的操作
-
定義函式
創建一個名為 PresentOrElseHandler 的函式式介面,介面的引數一個為 Consumer 介面,一個為 Runnable , 分別代表值不為空時執行消費操作和值為空時執行的其他操作
/**
* 空值與非空值分支處理
*/
public interface PresentOrElseHandler<T extends Object> {
/**
* 值不為空時執行消費操作
* 值為空時執行其他的操作
*
* @param action 值不為空時,執行的消費操作
* @param emptyAction 值為空時,執行的操作
* @return void
**/
void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);
}
-
撰寫判斷方法
創建一個名為 isBlankOrNoBlank 的方法,方法的回傳值為剛才定義的 函式式介面 - PresentOrElseHandler ,
/**
* 引數為true或false時,分別進行不同的操作
*
* @param b
* @return com.example.demo.func.BranchHandle
**/
public static PresentOrElseHandler<?> isBlankOrNoBlank(String str){
return (consumer, runnable) -> {
if (str == null || str.length() == 0){
runnable.run();
} else {
consumer.accept(str);
}
};
}
-
使用方式
呼叫工具類引數引數后,呼叫 函式式介面 的 presentOrElseHandle 方法傳入一個 Consumer 和 Runnable
引數不為空時,列印引數

引數不為空時

結尾
Function 函式式介面是 java 8 非常重要的特性,利用好 Function 函式可以極大的簡化代碼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/389143.html
標籤:java
上一篇:一次性上傳300張圖片引發的思考
下一篇:SpringBoot整合微信登錄
