来源:juejin.cn/post/7011435192803917831在开发过程中,经常使用if...else...判断并抛出Exception、分支处理等操作。这些if...else...充斥在代码中,严重影响了代码的美观。这时候我们可以使用Java8的Function接口来消除if...else....if(...){thrownewRuntimeException("Anexceptionoccurred");}if(...){doSomething();}else{doOther();}Function函数式接口用注解@FunctionalInterface来标记,只有包含一个抽象方法的接口才是函数式接口。函数式接口主要分为Supplier供给函数、Consumer消费函数、无参无返回的Runnable函数、有参有返回的Function函数。Function可以看成是转换函数Supplier。供应商函数的表现形式是不接受参数,只返回数据。消费者消费函数。Consumer消费函数与Supplier正好相反。消费者接受一个参数,没有返回值。Runnable没有参数,也没有返回函数。Runnable没有参数,也没有返回值。函数函数接收一个参数并返回一个值。Supplier、Consumer、Runnable可以看作是Function的一种特殊形式。使用技巧来处理抛出异常的if1。定义一个函数,以抛出异常的形式来定义功能接口。该接口只有参数,没有返回值。它是一个消费者界面。/***抛出异常接口**/@FunctionalInterfacepublicinterfaceThrowExceptionFunction{/***抛出异常信息**@parammessage异常信息*@returnvoid**/voidthrowMessage(Stringmessage);}2.编写判断方法创建工具类VUtils,创建一个isTure方法,其返回值为刚才定义的函数式接口——ThrowExceptionFunction。ThrowExceptionFunction的接口实现逻辑是参数b为真时抛出异常/***参数为真时抛出异常**@paramb*@returncom.example.demo.func.ThrowExceptionFunction**/publicstaticThrowExceptionFunctionisTure(booleanb){return(errorMessage)->{if(b){thrownewRuntimeException(errorMessage);}}};}3.使用方法调用工具类的parameter参数后,调用功能接口的throwMessage方法传入异常消息。输入输出参数为false时,正常执行;输入输出参数为真时,如果分支操作则抛出异常处理1.定义函数式接口创建一个函数式接口,名称为BranchHandle,该接口的参数为两个Runnable接口。这两个Runnable接口分别表示为true或false时要执行的操作/***分支处理接口**/@FunctionalInterfacepublicinterfaceBranchHandle{/***分支操作**@paramtrueHandle为true时要执行的操作@paramfalseHandle为false时执行的操作*@returnvoid**/voidtrueOrFalseHandle(RunnabletrueHandle,RunnablefalseHandle);}2.编写判断方法,创建一个名为isTureOrFalse的方法,该方法的返回值就是现在定义功能接口-BranchHandle。/***当参数为true或false时,分别执行不同的操作**@paramb*@returncom.example.demo.func.BranchHandle**/publicstaticBranchHandleisTureOrFalse(booleanb){return(trueHandle,falseHandle)->{如果(b){trueHandle.run();}else{falseHandle.run();}};}3.当usage参数为true时,当trueHandle参数为false时执行,如果有值则执行falseHandleConsume操作,否则执行空基操作1.定义一个函数创建一个函数式接口,名称为PresentOrElseHandler,并接口的参数之一是Consumer接口。一种是Runnable,分别表示值不为空时的消费操作和值为空时的其他操作/***空值和非空值分支处理*/publicinterfacePresentOrElseHandler
