Lambda表达式
原因:匿名内部类语法是冗余的
体现的是函数式编程思想,只需要将实现的代码放到函数中
Lambda是一个匿名函数,只需要将要执行的代码放到表达式中即可
语法:
(参数类型 参数名称) ->{
代码体;
}
格式说明:
(参数类型 参数名称):参数列表
{代码体;}方法体
->箭头 分割参数列表和方法体,没有实际含义
匿名内部类会在编译时生成一个class文件
lambda在程序运行时会生成一个类
1.在类中新增一个方法,方法体就是lambda表达式的代码
2.还会形成一个匿名内部类,实现接口,重写抽象方法
3.在接口的重写方法中会调用新生成的方法
省略格式
参数类型可以省略
小括号内有且仅有一个参数,小括号可以省略
如果大括号内有且仅有一条语句,可以同时省略大括号,return以及分号
栗子
(int a) ->{
return new Person();
}
省略后:
a -> new Person()
前提条件
1.方法的参数或局部变量类型必须为借口才能使用Lambda表达式
2.接口中有且仅有一个抽象方法
Lambda表达式和匿名内部类的对比
1.所需的类型不一致
匿名内部类需要的类型可以是类、抽象类、接口
Lambda需要的接口必须是接口
2.抽象方法的数量不一致
匿名内部类所需的接口中抽象方法的数量随意
Lambda需要的方法只能为一个
3.实现原理不一致
匿名内部类会在编译后生成class文件
Lambda表达式是在程序运行时动态生成class