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
廣告