有且只有一个抽象方法的接口。函数式接口适用于函数式编程,在java函数式编程的体现就是
Lambda:()->{}
特点:
延迟加载(解释:满足条件执行,不满足条件不执行,避免性能浪费)
定义格式:
修饰符 interface 接口名称{
Public abstract 返回值类型 方法名称(可选参数信息);
}
@FunctionalInterface注解的作用:
用来检测函数式接口是否正确,因为函数式接口只能有一个抽象方法,为了避免就用检测注解,成功后进行编译!
Lambda优化案例-代码详解(于普通拼接字符对比)
packagecn.itcast.Lambda;
publicclassDemo01Logger{
/*消耗内存的传递内容,if语句相同
publicstaticvoidshowLog(intlevel,Stringmessage){传递int类型的等级,日志信息
if(level==1){
System.out.println(mb.builderMessage());
}
*/
//使用函数式编程必须存在函数式接口
publicstaticvoidshowLog(intlevel,MessageBuildermb){//传递int类型的等级,接口
if(level==1){
System.out.println(mb.builderMessage());
}
}
publicstaticvoidmain(String[]args){
Stringmsg1="Hellow";
Stringmsg2="World";
Stringmsg3="Java";
/*消耗内存的输出,不管等级是否为一,下面的字符串都会进行拼接
showLog(level:1,message:msg1+msg2+msg3);
*/
//如何等级不等于1,下面这段代码就不是执行;Lambda表达式用()->{}表示
showLog(1,()->{
returnmsg1+msg2+msg3;
});
}
}
注解类代码:
packagecn.itcast.Lambda;
@FunctionalInterface
publicinterfaceMessageBuilder{
publicabstractStringbuilderMessage();
}
函数式接口作为方法的参数
函数式接口作为方法的返回值类型