Java - Lambda Error:Variable used in lambda expression should be final or effectively final

Lambda表達式提示變量錯誤:Variable used in lambda expression should be final or effectively final...

註釋掉第二行就OK。

分析:根據語法,變量必須爲final,但是 a 已經被修改了。

爲什麼 Lambda 表達式(匿名類) 不能訪問非 final 的局部變量呢? 因爲實例變量存在堆中,而局部變量是在棧上分配,Lambda 表達(匿名類) 會在另一個線程中執行。如果在線程中要直接訪問一個局部變量,可能線程執行時該局部變量已經被銷燬了,而 final 類型的局部變量在 Lambda 表達式(匿名類) 中其實是局部變量的一個拷貝。

當然以上情況是在 Lambda 裏不在改變值的情況下,如果需要改變值,或者試試還有一種辦法就是將整個局部變量聲明在 Lambda 裏面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章