java匿名內部類訪問外部對象


問題:

  在《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.

 


免責聲明!

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



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