首頁 > Java > java教程 > Lambda 表達式和捕獲變數

Lambda 表達式和捕獲變數

Mary-Kate Olsen
發布: 2025-01-12 06:29:45
原創
657 人瀏覽過

Expressões lambda e a captura de variáveis

存取包含範圍內的變數

  • lambda 表達式可以存取:
  • 包含類別的實例變數。
  • 外部類別中定義的靜態變數。
  • this 參數,引用外部類別的呼叫實例。

存取局部變數

  • 使用外部作用域局部變數時:
  • 局部變數必須是有效的final。
  • 有效的最終變數:賦值後其值不會改變的變數。
  • 不需要明確宣告為final。
  • 修改局部變數(在 lambda 內部或外部)會使其捕獲無效。

修改限制
無法修改:

  • 在 lambda 表達式中捕獲的局部變數。
  • 修改這些變數會刪除它們的有效最終狀態。

實例變數的修改
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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板