首頁 >Java >java教程 >為什麼 Lambda 表達式需要 Final 或有效 Final 變數?

為什麼 Lambda 表達式需要 Final 或有效 Final 變數?

Linda Hamilton
Linda Hamilton原創
2024-12-25 10:08:09809瀏覽

Why Do Lambda Expressions Require Final or Effectively Final Variables?

Lambda 表達式中使用的變數需要Finality

嘗試使用非Final 時出現錯誤訊息“Lambda 表達式中使用的變數應該是Final 或有效Final” lambda 表達式中的變數。此要求確保捕獲的變數的不變性。

在提供的程式碼片段中:

private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) {
    ...
    cal.getComponents().getComponents("VTIMEZONE").forEach(component -> {
        ...
        if (calTz == null) {
            calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
        }
    });
    ...
}

變數 calTz 在 lambda 表達式中使用,且不具有保證的最終狀態。這違反了 lambda 表達式只能捕捉最終變數或實際上最終變數的規則。

為什麼要製定此規則? Java 語言規格 (JLS) 在第 15.27.2 節中解釋說,它阻止存取動態變更的局部變量,從而緩解並發問題。透過確保捕獲的變數是不可變的,該語言降低了錯誤的風險。

此要求也適用於匿名內部類別。此類中使用的變數也必須是最終的或有效最終的,以確保線程安全。

以上是為什麼 Lambda 表達式需要 Final 或有效 Final 變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn