函数式接口

Summary::只包含一个抽象方法的接口,称为函数式接口

我们可以在任意函数式接口上使用@FunctionalInterface 注解,这样做可以编译检查它是否是一个函数式接口,注解写在接口声明上面,如果不报错,就不是函数式接口;
函数式接口作为函数参数时可以接收一段Java Lambda表达式(代码样例),或者方法引用
@FunctionalInterface注解不是必须的,不加这个注解的接口(前提是只包含一个方法)一样可以作为函数类型。不过,显而易见的是,加了这个注解表意更明确、更直观,是更被推荐的做法。

为什么只能有一个抽象方法?

不限制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博客