lambda 內使用的區域性變數必須是final的

2021-10-09 08:22:46 字數 508 閱讀 5982

在開發**中遇到乙個問題,使用lambda遍歷map,外部有乙個string,在迴圈中把 string 字串的關鍵字進行替換,但是一直不能替換成功。

錯誤提示,使用的這個變數必須是final或者是實際上final的?為什麼?

lambda是乙個匿名內部類,內部類是指在乙個外部類內部再定義乙個類。內部類可以被static public default protected private修飾,外部頂級類(類名和檔名相同)只能使用public 和 default。   內部類是乙個編譯時的概念,一旦編譯成功,就會成為完全不同的兩個類。

內部類包括:

成員內部類

區域性內部類

巢狀內部類

匿名內部類

匿名內部類:

編譯時內部類和外部類編譯成兩個類,外部類傳給內部類的引數是通過構造器複製給內部類的,如果內部類中吧引數值改變了,但是外部類又不會被改變,就會造成錯誤。1.7的時候要求必須明確用final修飾,1.8不用顯示的用final修飾了

多執行緒 執行緒內區域性變數

該類提供了執行緒內區域性 thread local 變數。好比有兩個視窗 兩個執行緒 乙個視窗可以拿飲料,乙個視窗可以拿食物。現在有多個人要來拿東西,如果在飲料視窗有的人拿到了飲料,有的人拿到了不該拿的食物,就說明執行緒之間出現了混亂,我們應當避免這種情況出現。以下 就可能會出現執行緒混亂的問題 p...

區域性變數使用遇到的問題

再寫哈夫曼樹實現的時候,用了標準庫優先順序佇列來儲存,更新結點,但是直接儲存節點物件還是儲存指標呢,本來我習慣於儲存指標感覺指標很好用,也很靈活。但就是想試試直接儲存節點,於是很自然地分配了區域性物件,然後加到佇列裡,然後在分配了區域性物件,加到佇列裡,執行程式,怎麼搞都不對,後來去網上求助,才明白...

如何理解成員變數在堆內,區域性變數在棧內?

成員變數在堆記憶體裡,區域性變數在棧記憶體裡。基礎型別 我有疑惑 既然成員變數存在於物件中,物件存在於堆中,所以成員變數存在於堆中。那麼按照這樣的推理,區域性變數存在於方法中,而方法存在於物件中,物件存在於堆中,那是不是可以說區域性變數存在於堆中?解決思想 當物件new 出來,實體存在於堆,物件的成...