一、使用前提
当前 Lambda 表达式仅适用于函数式接口,即将 Lambda 表达式作为函数式接口中抽象方法的具体实现方法传递进去。
Java中的lambda无法单独出现,它需要一个函数式接口来盛放,lambda表达式方法体其实就是函数接口的实现.
二、函数式接口
函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个抽象方法的接口。比如Java标准库中的java.lang.Runnable和 java.util.Comparator都是典型的函数式接口。为什么我这里都说是接口了,还要强调是只有一个抽象方法而不是说成只有一个方法呢?因为 Java8 中支持在接口中声明默认的实现方法啦,使用 default 或者 static 关键字来修饰即可(这是因为考虑到,不能提供默认方法的接口维护代价太高)。
java 8提供 @FunctionalInterface作为注解,这个注解是非必须的,只要接口符合函数式接口的标准(即只包含一个方法的接口),虚拟机会自动判断, 但 最好在接口上使用注解==@FunctionalInterface==进行声明,以免团队的其他人员错误地往接口中添加新的方法。
@FunctionalInterface //添加此注解后,接口中只能有一个抽象方法。
public interface A {
void call();
}
三、直接上代码
public class TestLambda1 {
public static void main(String[] args) {
//匿名内部类,没有类的名字,直接用接口new
ILike like = new ILike() {
@Override
public void lambda(int a,int b) {
System.out.println(a);
}
};
like.lambda(2,3);
//lambda表达式,对匿名内部类简化
ILike like1= (int a,int b)->{
System.out.println(a);
System.out.println(b);
};
like1.lambda(34,8);
}
}
//函数式接口
interface ILike {
void lambda(int a,int b);
}