---
在开发程序中经常会使用 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
函式可以极大的简化代码,
0 评论