前幾天使用lamdba時,報了一個這個錯,原因是在lamdba體中使用了一個變量,覺得很奇怪!
今天在讀這本書的時候,又看到了這個解釋,這里有了更深刻的理解,總結一下:
在jdk1.8之前在使用匿名內部類的時候方法里面的變量必須需要加final
否則是會報錯的,但是jdk1.8放松了這個限制,可以使用非final修飾,但是這個變量,是不允許另外賦值的,否則lamdba體重也會報錯,如圖:
換句話說,Lambda 表達式引用的是值,而不是變量.所以在lamdba和匿名內部類中使用變量不能被改變
如果你試圖給該變量多次賦值,然后在 Lambda 表達式中引用它,編譯器就會報錯,典型的就是在for循環里使用lamdba了,如果你需要用到for循環的i變量,那么lamdba是不合適的: