[英]Can someone explain this Java syntax to me?
有人可以向我解釋這種Java語法嗎? 括號內的括號在做什么?
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
這稱為匿名內部類 。 它創建一個擴展WindowAdapter
的未命名類(也可以指定一個接口,在這種情況下,該類將實現該接口),並創建該類的一個實例。 在方括號內,您必須實現所有抽象方法或所有接口方法,並且您也可以覆蓋方法。
為了補充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.