存取包含範圍內的變數
- 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中文網其他相關文章!

深入Java:值得探索的虛擬機世界很多Java開發者在掌握了基礎語法和常用框架後,都希望進一步提升自己的技術�...

EasyExcel模板填充合併單元格時的常見問題在使用EasyExcel進行Excel...

系統對接中的字段映射挑戰及其解決方案在系統對接過程中,經常會遇到需要將一個系統的接口字段映射到另一...

SpringBoot應用中PgJDBC連接池拋出PSQLException:ERROR:cancelingstatementduetouserrequest異常在使用SpringBoot MyBatis-Plus ...

如何優化熱點數據的篩選與同步?在處理大規模數據同步時,如何有效篩選熱點數據成為一個關鍵問題。假設存...

Java虛擬線程與多線程並行:兼容性挑戰在Java編程中,虛擬線程的引入為開發者提供了更高效的並發處理方式。 �...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。