JavaSE8引入特性:
JavaSE8更新特性:Lambda项目中提供的语言级匿名函数支持(官方称为Lambda表达式,非官方亦称为闭包)
优点:函数式编程,避免内部类过多使用,代码简介
缺点:代码可读性变差,只适合于简短的业务逻辑,不便于调试
理解:
匿名内部类:方法、块、构造器内使用,用来实现接口或继承抽象类,不能创建对象
Lambda:简化版的匿名内部类,用于实现只有一个抽象方法的接口,我们把这个接口称为函数式接口,该接口可使用@FunctionaIInterface注解
语法:
(入口参数) -> {主体}
入口参数可以有0-n个,主体语句也可以有o-n个
注:入口参数必须于接口抽象方法参数类型、个数一致
1.当入口参数只有一个时可省略()
public class demo2 { public static void main(String[] args) { MyClass myClass = a -> {};//当入口参数只有一个时,可省略 } } @FunctionalInterface interface MyClass{ void my(int a);//返回值类型void,一个int参数 }
2.主体中只有一句时,可省略{}和return,但主体返回值类型必须是接口中抽象方法返回值类型或其子类
public class demo2 { public static void main(String[] args) { MyClass myClass = () -> "a";//省略{}和return,返回Object的子类 } } @FunctionalInterface interface MyClass{ Object my();//返回值类型为Object,无参 }
3.当函数式接口中抽象方法参数为可变参数时
public class demo2 { public static void main(String[] args) { //可变参数本质就是一个数组,所以入口参数只写一个代表可变参数数组,省略() MyClass myClass = objs -> "a";//省略{}和return,返回Object的子类 } } @FunctionalInterface interface MyClass{ Object my(Object...objs);//返回值类型为Object,参数为Object类型可变参数 }