Java 中 Lambda 表达式和闭包之间的差异?
Java 支持 lambda 表达式但不支持闭包。Lambda 表达式是一个匿名函数并且可以定义为一个参数。闭包 类似于代码段或代码块,可以在不属于方法或类的形式下使用。这意味着闭包可以访问其参数列表中未定义的变量并将其分配给变量。
语法
([comma seperated parameter-list]) -> {body}
在以下示例中,create() 方法有一个本地变量“value”,具有较短的生命周期,当我们退出 create()方法时就会消失。在该方法完成之后,此方法会将闭包返回到main() 方法中的调用方。在此过程中,它会从其堆栈中移除变量“value”,而 lambda 表达式已经执行。
示例
public class LambdaExpressionClosureTest { public static void main(String[] args) { Runnable runnable = create(); System.out.println("In main() method"); runnable.run(); } public static Runnable create() { int value = 100; // Lambda Expression Runnable runnable = () -> System.out.println("The value is: " + value); System.out.println("In create() method"); return runnable; } }
输出
In create() method In main() method The value is: 100
广告