簡體   English   中英

即使方法超出范圍,內部類如何訪問方法中的最終變量?

[英]How final variables in method can be accessed by Inner class even if method goes out of scope?

我已經通過許多鏈接獲得此答案。 而且我知道從語法上講Java不允許在Inner類中訪問非最終變量。 根據鏈接,我還了解到,即使方法完成且局部變量超出范圍,制作局部變量最終變量也可以使其存活。

但是,如果方法超出范圍,那么如何將其最終定為在已引用該方法的內部類中仍然有效?

我指的是下面的代碼。

public class Outer {
    public static void outerMethod() {
        int methodVariable = 40;
        class Inner {
            public void innerMethod() {
                System.out.println(methodVariable); // This line produces compile time error.
            }
        }
    }
}

如果在調試器中檢查Inner類的實例,則會發現存在methodVariable的字段:

調試器中Inner類的實例

並不是說這是唯一可能的實現,但是似乎編譯器實際上為methodVariable創建了一個私有字段,並在那里復制了變量的值。

這也可能就是變量必須為final或有效為final的原因。 如果變量的值更改,則無法再與該字段的值同步。

暫無
暫無

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

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