1、lambda表达式 实现了具有单一方法的接口,如:
new Thread(
() -> System.out.println("Hello world!");
);
Runnable接口只有一个run方法,就是具有单一抽象方法的接口,可以用lambda表达。
2、函数式接口并不在意接口名字,而关注参数和返回值的个数和类型,只要是符合参数和返回值定义的实现都可以赋值给函数式接口,如:
@FunctionalInterface
interface Action<T> {
public void execute(T t);
}
Action action = System.out :: println;
action.execute("Hello World!");
Action是一个函数式接口,只有一个execute抽象方法,有一个T类型参数,无返回值。
System.out.println方法 有一个字符串类型参数,无返回值,所以符合Action接口定义,可以把它作为Action接口的实现。