簡體   English   中英

內部類的非最終變量:應該由編譯器自動修復?

[英]Non final variable from inner class : should be automatically fixed by compiler?

當我使用內部類的非final變量時,我有一個編譯錯誤:

public static void main(String[] args) {
    String s = "hello";
    s += "world";
    Object myObj = new Object() {
        public String toString() {
            return s; // compile error
        }
    };
    System.out.println(myObj);
}

但是,我可以通過添加一個引用我想要訪問的另一個變量的偽終結變量tmp來解決這個問題:

public static void main(String[] args) {
    String s = "hello";
    s += "world";
    final String tmp = s;
    Object myObj = new Object() {
        public String toString() {
            return tmp; // that works!
        }
    };
    System.out.println(myObj);
}

例如,編譯器可以輕松地自動化添加臨時最終變量的過程。

我的問題是:為什么編譯器不會自動執行允許我們擺脫此錯誤的簡單更改?

編譯器不能用常量替換對局部變量的所有引用,但是當構造內部類的實例時,該值將傳遞給適當的構造函數並存儲在變量中。 根據需要,自動實現它很麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM