8-1、介绍
从jdk8开始的一种语法,用以简化匿名内部类
8-2、备注
函数式接口--------有且仅有一个方法
8-3、注意:
8-3-1、Lambda只能实现函数式接口的简化模式
8-3-2、可以使用@FunctionalInterface注解 ,判断该接口是否是函数式接口
8-4、格式
(被重写方法的形参)->{被重写的方法的方法体}
8-5、简化Lambda
8-5-1、可以省略参数类型
public class Test{
public static void main(){
//匿名内部类
useInter(new InterA{
@override
public void show(String name){
System.out.println(name);
}
});
//Lambda
useInter((name)->{
System.out.println(name);
});
//8-5-2
useInter( name->{
System.out.println(name);
});
//8-5-3
useInter( name->
System.out.println(name)
);
//8-5-4
useInterB((a, b)->
a + b
);
}
public static void useInter(InterA interA){
interA.show("小米");
}
public static void useInterB(InterB interB){
System.out.println(interB.show(10, 10));
}
}
interface InterA{
void show(String name);
}
interface InterB{
int show(int a, int b);
}
8-5-2、当只有一个参数,()和参数类型都可以省略
8-5-3、当语句体只有一句,可以省略{}和
8-5-4、当只有返回值一句,省略{}和; 必须省略return
8-6、语法糖
介绍:实现原理相同,但是更加简单
8-7、Lambda和匿名内部类的区别
8-7-1、使用场景
Lambda:函数式接口
匿名内部类:具体类;抽象类;接口
8-7-2、实现原理
Lambda:编译后,不会产生单独的字节码文件(.class),它是动态生成(只在用的时候存活)
匿名内部类:编译后,产生单独的字节码文件



