簡體   English   中英

有人可以向我解釋這種Java語法嗎?

[英]Can someone explain this Java syntax to me?

有人可以向我解釋這種Java語法嗎? 括號內的括號在做什么?

addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

這稱為匿名內部類 它創建一個擴展WindowAdapter的未命名類(也可以指定一個接口,在這種情況下,該類將實現該接口),並創建該類的一個實例。 在方括號內,您必須實現所有抽象方法或所有接口方法,並且您也可以覆蓋方法。

這是一個匿名內部類 -方括號表示類聲明的開始和結束。 這是一個潛在有用的SO問題 ,還有很多其他問題

為了補充andersoj的答案,通常在方法需要X實例但X是抽象類或接口時使用它們。

在這里,您實際上是從WindowAdapter創建派生類,並覆蓋執行特定任務的方法之一。

對於事件處理程序/偵聽器,此語法非常常見。

它是一個匿名內部類。 這只是捷徑。 您可以想象如果需要將其創建為頂級類,代碼將是什么樣子:

class CloseApplicationWindowAdapter extends WindowAdapter {
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

然后,在您的代碼內執行以下操作:

CloseApplicationWindowAdapter adapter =  new CloseApplicationWindowAdapter();
addWindowListener(adapter);

兩種解決方案都具有完全相同的效果(例如,匿名類將創建Class$1.class文件)。 如果匿名類不會變得太大/太復雜/不重要,那么Java程序員通常會更喜歡匿名類方法。

暫無
暫無

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

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