函数式接口
Summary::只包含一个抽象方法的接口,称为函数式接口
我们可以在任意函数式接口上使用@FunctionalInterface
注解,这样做可以编译检查它是否是一个函数式接口,注解写在接口声明上面,如果不报错,就不是函数式接口;
函数式接口作为函数参数时可以接收一段Java Lambda表达式(代码样例),或者方法引用。
@FunctionalInterface
注解不是必须的,不加这个注解的接口(前提是只包含一个方法)一样可以作为函数类型。不过,显而易见的是,加了这个注解表意更明确、更直观,是更被推荐的做法。
为什么只能有一个抽象方法?
- 如果有多个抽象方法,这个接口不是函数式接口,简写的时候省略了方法名,IDEA不能知道到底重写的是哪一个方法,不能推断出来;
不限制default方法和static方法,因为带有实现体,所有不受此限制.
java 接口default函数
函数式接口可以定义默认方法,在类没有对方法实现时,其主体为方法提供默认实现的方法)。哪怕有很多默认方法,只要接口只定义了一个抽象方法,它就仍然是一个函数式接口。
@FunctionalInterface
public interface IAdd<T, R> {
R add(T t1, T t2);
default R test1(T t1, T t2) {//可以额外定义default方法
return null;
}
static <T,R> R test2(T t1, T t2) {//可以额外定义static方法
return null;
}
}
参考文章
彻底弄懂@FunctionalInterface、Lambda表达式和方法引用-CSDN博客
详解Java中的Lambda表达式_java中的lamada表达式-CSDN博客