為什么匿名內部類參數必須為final類型


首先,這關系到java對象中的生命周期的問題。

基礎數據類型和引用變量(不是被引用的對象)做局部變量時(這里是和做為變量成員變量區別,它們作為成員變量后就作為對象的一部分和對象的生命周期相同了);它們的生命中周期是有作用域的,它沒有受生命周期影響這一說,但是同樣在這一作用域創建的對象的生命周期並不受作用域的限制。

 

局部變量的生命周期與局部內部類的對象的生命周期的不一致。

 

內部類里面使用外部類的局部變量時,其實就是內部類的對象在使用它,內部類對象生命周期中都可能調用它,而內部類試圖訪問外部方法中的局部變量時,外部方法的局部變量很可能已經不存在了,那么就得延續其生命,拷貝到內部類中,而拷貝會帶來不一致性,從而需要使用final聲明保證一致性。

 

復制保證生命周期延續,final保證引用一致。

 

參考資料:

http://lionheartyd.iteye.com/blog/1472407

http://bbs.csdn.net/topics/300068105

 


免責聲明!

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



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