Lambda 表达式和函数式接口
使用 Lambda 可避免使用匿名类,减轻了工作量,提高程序可读性;
Lambda 表达式的使用仍然在一定程度上类似于匿名类的使用,通常使用函数式接口实现 Lambda 式,函数式接口就类似于命令模式里面的接口,不过 Lambda 表达式的语法不同于命令模式的语法;
函数式接口就是一个含有一个方法的普通接口,但给这个接口增加了方法(不用 @FunctionalInterface 修饰)就会使程序出错,现可以用 @FunctionalInterface注解修饰接口,即便增加方法也不会使程序出错;
用 @FunctionalInterface 修饰的函数式接口可以含有默认方法(必须具有实现)和静态方法(可以具有实现);
常见的函数式接口有 Consumer,BiConsumer;
函数式接口的语法(即 Lambda 表达式)为:([(可选:参数类型)] 参数) -> {方法体} 或 (参数) ->返回值;
以函数式接口为参数的方法,自然就能以方法引用为参数,例如函数式接口 A 的普通方法为 T sum(int int1, int int2),那么只要一个已实现的方法的方法签名“等同于”函数式接口的普通方法的签名,例如 Integer 的 sum 方法(int sum(int int1, int int2)),那么就可以对入参为函数接口 A 的方法传入对 Integer 的 sum 方法的方法引用;
Lambda 表达式的使用中,方法的入参是一个接口类实例,在使用中不用显示实例化接口类,只需要使用指定的语法并实现接口的普通方法即可,使用上其实就是命令模式的简化模式;
那么总的来说,Lambda 表达式就是让编码更加方便(配合 Stream API 更是如此),让代码更简洁直观,提高开发效率;
浙公网安备 33010602011771号