local variables referenced from a Lambda expression must be final or effectively final------理解


前幾天使用lamdba時,報了一個這個錯,原因是在lamdba體中使用了一個變量,覺得很奇怪!

今天在讀這本書的時候,又看到了這個解釋,這里有了更深刻的理解,總結一下:

 

在jdk1.8之前在使用匿名內部類的時候方法里面的變量必須需要加final

 

 否則是會報錯的,但是jdk1.8放松了這個限制,可以使用非final修飾,但是這個變量,是不允許另外賦值的,否則lamdba體重也會報錯,如圖:

換句話說,Lambda 表達式引用的是值,而不是變量.所以在lamdba和匿名內部類中使用變量不能被改變

如果你試圖給該變量多次賦值,然后在 Lambda 表達式中引用它,編譯器就會報錯,典型的就是在for循環里使用lamdba了,如果你需要用到for循環的i變量,那么lamdba是不合適的:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM