lambda的定义
java中lambda的本质是匿名函数,并且 继承 或者 java8接口的default修饰的方法不会影响lambda的特性。
为什么叫它匿名函数,很简单,可以不写函数名。
简单示例:
package org.example; public interface DemoInterface { default void aFun() { System.out.println("这是一个a方法"); } default String bFun() { System.out.println("执行了b方法,并且返回方法名称"); return "bFun"; } default String bFun(String param) { System.out.println("还可以重载b方法,并且返回传入参数"); return param; } String cFun(); }
package org.example; public class Main { public static void main(String[] args) { demoFun(() -> "lambda"); DemoInterface demoInterface = () -> "lambda2"; demoFun(demoInterface); demoInterface.aFun(); System.out.println(demoInterface.bFun()); } public static void demoFun(DemoInterface demoInterface) { System.out.println(demoInterface.cFun()); } }
常见的函数式接口:
Runnable/Callable
Supplier/Consumer
Compparator
Predicate
Function
还可以在接口上添加 @FunctionalInterface 来校验复杂的接口是否符合函数式接口的定义
ps:
当匿名方法所接收的参数只有一个的时候,可以省略小括号
当匿名方法所要执行的逻辑代码只有一行的时候,可以省略大括号