1什么是函数式接口:
2如何判断函数式接口是否成功创建:使用FUNCTIONINTERFACE注解(使用方法同@override)
3 函数式接口的使用:一般可以作为方法的参数和返回值来使用(在这里重新复习接口内容知识)
1.如果主方法调用的方法,该方法传递进来的参数是一个接口,那么可以:
1主方法中传入的参数可以是:接口的实现类
2主方法中传入的参数可以是:接口的匿名内部类
3如果方法中的参数是函数式接口,则可以使用lambda表达式
package com.bed.hanshushijiekou;
//使用三种方法来调用接口的抽象方法
public class mainfangfa {
//第一种方法:直接把接口传递进来,然后调用接口中的方法。
public static void method1(myInterface myinter){
myinter.method();
}
public static void main(String[] args) {
//第二种方法:调用方法一,然后参数传递接口的实现类
method1(new myInterfaceimpl());
//第三种方法。参数传递接口的匿名内部类。
method1(new myInterface() {
@Override
public void method() {
System.out.println("传递接口的匿名内部类重写接口中的方法");
}
});
//同样是第三种方法使用lambda表达式
method1(()-> System.out.println("使用lambda表达式传递接口的匿名内部类重写接口中的方法"));
}
}
补充知识点:lambda表达式可以看作是匿名内部类的语法糖。但是lambda表达式省去
了.class文件,所以效率更高
添加知识点:lambda表达式的延迟性:
现有如下代码 :
日志只有传入等级为一级时才显示信息,当传入等级为其他等级时,msg1+msg2+msg3的组
合操作就是多余的。这时我们可以使用lambda表达式的延时特性来节省资源。避免性能浪费 代码实现:
//创建一个接口里面有一个抽象类方法
package com.bed.hanshushijiekou.demo01;
public interface msgplus {
public abstract String msgplus();
}
//执行日志
package com.bed.hanshushijiekou.demo01;
public class RiZhishow {
public static void msgshow(int level,msgplus msg){
if(level==1){
System.out.println(msg.msgplus());
}
}
public static void main(String[] args) {
String msg1="hello";
String msg2="bed";
String msg3="java";
msgshow(2,()->{
return msg1+msg2+msg3;//重写接口中的抽象方法
});
}
}
1.使用lambda表达式作为方法的参数:(其实上面的方法就是一个大的演示框架,而下面的
主方法的lambda就相当于往构建好的大框架(接口的实现类)中添加更细致的操作步骤而已)