什么是函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口的用途
主要用于函数式编程(即使用lambda表达式编程),函数式接口可以使用于lambda进行参数定义。
如何定义函数式接口
@FunctionalInterface:此注解用于标注接口为函数式接口,非必要,添加后会添加校验,避免出错
/**
* 注解也可以不写,但是写了会有校验,避免出错
* 有且只有一个抽象方法(接口中方法默认为public abstract),但是可以有多个default方法
*/
@FunctionalInterface
public interface MyFuncInterface<T> {
void method1(T param1);
default void method2(){
System.out.println("自己定义的函数式接口");
}
default void method3(){
System.out.println("-----------------");
}
}
提示示例
1: 不写方法
2:写多个方法
接口使用
public class Test {
@org.junit.jupiter.api.Test
public void test1(){
addNum("test",param1 -> System.out.println("-----------> " + param1));
}
public void addNum(String str, MyFuncInterface<String> myFuncInterface){
myFuncInterface.method1(str);
}
}
测试结果
Java 内置四大核心函数式接口
消费型接口 Consumer<T>
使用场景
主要针对的是消费入参但是无返回的场景
源码
示例
供给型接口:Supplier<T> T get()
使用场景
主要针对的是无入参,有返回的场景
源码
示例
函数型接口 Function<T, R>
使用场景
主要针对的是 转换(有入参,有返回,其中T是入参,R是返回)这个场景,//你也可以理解为扩展版的Consumer
源码
示例
断定型接口 Predicate<T>
使用场景
主要针对的是判断(有入参,有返回,凡是返回的类型固定为Boolean。可以说Function 是包含Predicate的 )场景
源码
示例
其他函数式接口