Lambda表达式
jdk1.8 新增Lambda表达式
作用: 简化匿名内部类的
使用前提: 函数式接口
函数式接口: 只有一个必须被重写的抽象方法的接口
强制检测是否为函数式接口: 注解@FunctionalInterface
语法:
() -> {}
():匹配要重写的抽象方法的参数列表
->:lambda符号 箭头符号 具有上下文推倒的作用
{}::匹配要重写的抽象方法的方法体
public class Lambda02 {
public static void main(String[] args) {
//匿名内部类
/*
* Smoke ss = new Smoke() {
*
* @Override public void smoking() { System.out.println("00000"); } };
*/
//lambda1
// Smoke s = ()->{
// System.out.println("11111");
// System.out.println("11111");
// };
// s.smoking();
// s.smoking();
// s.smoking();
//lambda2 方法体中如果方法体语句只有一句,方法体前后的{}可以省略
// Smoke s = ()->System.out.println("11111");
// s.smoking();
// s.smoking();
// s.smoking();
//lambda3 如果有参数,参数的数据类型可以省略
// Smoke s = (a, b)->System.out.println("11111"+a+b);
// s.smoking(1,2);
// s.smoking(2,3);
// s.smoking(4,5);
//lambda4 如果有参数只有一个,前后的()可以省略
// Smoke s = a->System.out.println("11111"+a);
// s.smoking(1);
// s.smoking(2);
// s.smoking(4);
//lambda5 如果语句体还有一句,并且3还是return语句,return关键字 以及前后{}可以一起省略
Smoke s = a-> "返回"+a;
System.out.println(s.smoking(2));;
System.out.println(s.smoking(3));;
}
}
@FunctionalInterface
interface Smoke{
String smoking(int a);
}