专栏名称: Java基基
一个苦练基本功的 Java 公众号,所以取名 Java 基基
目录
相关文章推荐
运营研究社  ·  来了!《运营总监实战手册3.0》包邮免费领 ·  昨天  
运营研究社  ·  如何用DeepSeek+comfy ... ·  2 天前  
运营研究社  ·  封号、禁言!2025年在小红书导流,要换思路了 ·  2 天前  
91运营网  ·  Deepseek黄金提问公式 ·  2 天前  
运营研究社  ·  2025巨量千川新政解读: ... ·  2 天前  
51好读  ›  专栏  ›  Java基基

Java8 中一个极其强悍的新接口,很多人没用过

Java基基  · 公众号  ·  · 2024-10-31 11:55

正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本

来源:网络


在开发过程中经常会使用 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的表现形式为即没有参数也没有返回值

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

1.定义函数

定义一个抛出异常的形式的函数式接口, 这个接口只有参数没有返回值是个消费型接口

/**
 * 抛异常接口
 **/

@FunctionalInterface
public interface ThrowExceptionFunction {

    /**
     * 抛出异常信息
     *
     * @param message 异常信息
     * @return void
     **/

    void throwMessage(String message);
}

2.编写判断方法

创建工具类 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);
        }
    };
}

3.使用方式

调用工具类参数参数后,调用函数式接口的 throwMessage 方法传入异常信息。当出入的参数为false时正常执行

当出入的参数为true时抛出异常

处理if分支操作

1.定义函数式接口

创建一个名为 BranchHandle 的函数式接口,接口的参数为两个Runnable接口。这两个两个Runnable接口分别代表了为true或false时要进行的操作

/**
 * 分支处理接口
 **/

@FunctionalInterface
public interface BranchHandle {

    /**
     * 分支操作
     *
     * @param trueHandle 为true时要进行的操作
     * @param falseHandle 为false时要进行的操作
     * @return void
     **/

    void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);

}

2.编写判断方法

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

3.使用方式

参数为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);
   
}

2.编写判断方法







请到「今天看啥」查看全文