問題:
在《Java編程思想》關於內部類的介紹中有這樣一句話:如果定義一個匿名內部類,並且希望它使用一個在外部定義的對象,那么編譯器器會要求其參數引用是 final 的。
interface Destination{ String readLabel(); } public class Parcel{ public Destination destination(final String dest){ return new Destination(){ private String label = dest; public String readLabel(){ return label; } }; } public static void main(String[] args){ Parcel p = new Parcel(); Destination d = p.destination("hello"); } }
就像你在destination() 的參數中看到的那樣。如果你忘記了,將會得到一個編譯時錯誤信息。
---------------------------------答案分割線--------------------------------------------------------
但是,我就是喜歡看報錯(好吧,這不是真心話XD)
把 final 刪除后,居然沒有報錯!!!Are you *** kidding me?
在試了很多例子都能編譯通過后,我開始想是不是版本問題,畢竟《Java編程思想》是基於 Java5 編寫的,我用的是 jdk1.8 的開發環境?
順着這個方向,我找了許多 jdk1.8 新特性的博客,最后終於找到了:jdk1.8 把它默認設置為final的了。
為了版本兼容,建議開發時加上 final.