Java—函数式接口
概念:
指的是在Java中,有且只有一个抽象方法的接口,接口中也可以包含其他的方法(静态的,私有的,默认的),但是抽象方法只能有一个
Lambda被称为可推导,可省略
语法糖概念:
格式:
只要确保接口中有且仅有一个抽象方法即可
由于接口当中的抽象方法的public abstract是可以省略的,所以定义一个函数式接口很简单
@FunctionalInterface
注解
@FunctionalInterface
public interface MyFunctionInterfance {
void method();
}
函数式接口的使用
一般可以作为方法的参数和返回值类型
public class Demo {
// 定义一个方法,使用函数式接口MyFunctionInterfance
public static void show(MyFunctionInterfance myInter){
myInter.method();
}
public static void main(String[] args) {
// 调用show方法,方法的参数是一个接口,所以可以传递接口的实现类
show(new MyFunctionInterfanceImpl());
// 调用show方法,方法的参数是一个接口,所以可以传递接口的匿名内部类
show(new MyFunctionInterfance() {
@Override
public void method() {
System.out.println("使用匿名内部类重写接口中的抽象方法1");
}
});
// 调用show方法,方法的参数是一个函数接口,所以可以使用Lambda表达式()是抽象方法的参数,{}是方法体
show(()->{
System.out.println("使用匿名内部类重写接口中的抽象方法2");
});
// 简化Lambda表达式
// 1.{}中只有一行,可以省略
show(()->System.out.println("使用匿名内部类重写接口中的抽象方法3"));
}
}