拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Java 8 中的这个界面真好用

Java 8 中的这个界面真好用

白鹭 - 2022-02-02 2145 0 0

---

在开发程序中经常会使用 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 函式的表现形式为接收一个自变量,并回传一个值, SupplierConsumerRunnable 可以看作 Function 的一种特殊表现形式

使用小技巧

处理抛出例外的 if

  1. 定义函式

定义一个抛出例外的形式的 函式式界面 , 这个界面只有自变量没有回传值是个 消费型界面

/**
 * 抛例外界面
 **/
@FunctionalInterface
public interface ThrowExceptionFunction {

    /**
     * 抛出例外信息
     *
     * @param message 例外信息
     * @return void
     **/
    void throwMessage(String message);
}

  1. 撰写判断方法

创建工具类 VUtils 并创建一个 isTure 方法,方法的回传值为刚才定义的 函式式界面 - ThrowExceptionFunctionThrowExceptionFunction 的界面实作逻辑为当自变量 btrue 时抛出例外

/**
 *  如果自变量为true抛出例外
 * 
 * @param b 
 * @return com.example.demo.func.ThrowExceptionFunction
 **/
public static ThrowExceptionFunction isTure(boolean b){

    return (errorMessage) -> {
        if (b){
            throw new RuntimeException(errorMessage);
        }
    };
}

  1. 使用方式

呼叫工具类自变量自变量后,呼叫 函式式界面throwMessage 方法传入例外信息,当出入的自变量为 false 时正常执行

当出入的自变量为 true 时抛出例外

处理 if 分支操作

  1. 定义函式式界面

创建一个名为 BranchHandle 的函式式界面,界面的自变量为两个 Runnable 界面,这两个两个 Runnable 界面分别代表了为 truefalse 时要进行的操作

/**
 * 分支处理界面
 **/
@FunctionalInterface
public interface BranchHandle {

    /**
     * 分支操作
     *
     * @param trueHandle 为true时要进行的操作
     * @param falseHandle 为false时要进行的操作
     * @return void
     **/
    void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);

}

  1. 撰写判断方法

创建一个名为 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();
        }
    };
}

  1. 使用方式

自变量为 true 时,执行 trueHandle

自变量为 false 时,执行 falseHandle

如果存在值执行消费操作,否则执行基于空的操作

  1. 定义函式

创建一个名为 PresentOrElseHandler 的函式式界面,界面的自变量一个为 Consumer 界面,一个为 Runnable , 分别代表值不为空时执行消费操作和值为空时执行的其他操作

/**
 * 空值与非空值分支处理
 */
public interface PresentOrElseHandler<T extends Object> {

    /**
     * 值不为空时执行消费操作
     * 值为空时执行其他的操作
     * 
     * @param action 值不为空时,执行的消费操作
     * @param emptyAction 值为空时,执行的操作
     * @return void    
     **/
   void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);
   
}

  1. 撰写判断方法

创建一个名为 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);
        }
    };
}

  1. 使用方式

呼叫工具类自变量自变量后,呼叫 函式式界面presentOrElseHandle 方法传入一个 ConsumerRunnable

自变量不为空时,打印自变量

自变量不为空时

结尾

Function 函式式界面是 java 8 非常重要的特性,利用好 Function 函式可以极大的简化代码,

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *