存取包含範圍內的變數
存取局部變數
修改限制
無法修改:
實例變數的修改
lambda 表達式可以:
範例:從外部作用域捕捉局部變數
代碼:
interface MyFunc { int func(int n); } class VarCapture { public static void main(String args[]) { // Variável local que pode ser capturada int num = 10; MyFunc myLambda = (n) -> { // Uso correto da variável num int v = num + n; // A instrução abaixo é inválida porque tenta modificar num // num++; return v; }; // Usando a expressão lambda System.out.println(myLambda.func(8)); // Exibe: 18 // Modificar num aqui também causaria erro // num = 9; } }
說明:
數位捕獲:
num 實際上是最終的,因為它在初始分配後不會更改。
Lambda 可以存取 num,但不能修改它。
執行:
myLambda.func(8) 回傳 18 因為:
num (10) 與參數 n (8) 相加,得到 18。
修改錯誤:
取消註釋 num 或 num = 9 會使捕獲無效,從而導致編譯錯誤。
注意:
重要提示:可以在 lambda 表達式中不受限制地使用和修改實例或靜態變數。
限制僅適用於外部作用域局部變數。
以上是Lambda 表達式和捕獲變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!