簡體   English   中英

Java內聯接口實現,變量和方法調用

[英]Java inline interface implementation, variables and method calls

在Java中,為什么可以這樣做

new java.awt.event.WindowAdapter() {
    public void windowClosing(java.awt.event.WindowEvent evt) {
        screenClosed();
    }
}

// ...

public void screenClosed() {
    running = false;
}

但不是

new java.awt.event.WindowAdapter() {
    public void windowClosing(java.awt.event.WindowEvent evt) {
        running = false;
    }
}

我猜在running是一個局部變量,而不是第二個示例中的字段,您必須使用screenClosed方法使其成為一個字段才能使其正常工作? 從您的代碼示例很難分辨。

如果是這樣:內部類(例如本地或匿名類)要求將(本地)變量標記為final (它們是常量)。 這是由於編譯器通過將變量作為參數傳遞給編譯器創建的構造函數,然后將其作為字段存儲在編譯器生成的類中而構造類的方式所致。

您可以通過將局部變量聲明為以下方式來解決此限制:

final boolean[] running = new boolean[]{true};

然后設置running[0] = false

暫無
暫無

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

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