簡體   English   中英

Java動作偵聽器:實現vs匿名類

[英]java action listener: implements vs anonymous class

我正在嘗試自學Java,但有一個問題我到目前為止無法回答。 在我的一些在線閱讀中,我發現了兩種使用動作監聽器的方法,它們似乎在做同樣的事情。 但是我試圖找出一個相對於另一個的優點/缺點。

像這樣使用匿名類更好嗎:

public MyClass() {
...
    myButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            //doSomething
        }
    });
...
}

還是最好在課程開始時像這樣實現:

public MyClass() implements ActionListener {
...
    myButton.addActionListener(this);

    public void actionPerformed(ActionEvent e) {
        //doSomething
    }
...
}

僅當您的類確實是ActionListener(是一種關系)並且將在其他地方用作ActionListener時,才應實現ActionListener。

如果僅在內部將其用作ActionListener,則實現ActionListener會將實現細節泄漏給該類的API 在這種情況下使用合成(有關系)。

其他接口和超類也是如此。

這實際上歸結為一種風格。 兩者在代碼中的執行方式完全相同。

單獨的類將使您的實際方法中的代碼更簡單,而匿名內部類將方法中的偵聽器實現代碼帶入該方法中,從而使執行過程更清晰。

在某些情況下,匿名內部類也可以在創建它們的方法中訪問最終變量。 您不能使用預編寫的類來做到這一點(盡管您可以將變量傳遞到控制器中)。

單獨的代碼是可重用的-因此,如果您在多個地方都具有相同的偵聽器,那么它無疑是贏家。

如果您使用匿名類,則代碼將更具可讀性,但是您可能不會重新使用它。

因此,如果它很短,我將只使用匿名類,而且我絕對可以確保不必在任何地方再次使用它。

暫無
暫無

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

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