5

我想教自己的Java和有一個問題,我目前無法回答。在我的一些在線閱讀中,我發現了兩種使用動作偵聽器的方法,它們似乎也是一樣。但我試圖弄清楚一個人的優勢/劣勢是什麼。java動作偵聽器:工具vs匿名類

是更好地使用匿名類是這樣的:

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 
    } 
... 
} 
+1

可能的重複:http://stackoverflow.com/questions/5451010/nested-class-vs-implements-actionlistener –

回答

1

這歸結爲一種風格的東西真的。兩者在代碼中的執行方式完全相同。

單獨的類將傾向於將實際方法中的代碼保持簡單,而匿名內部類將方法中的偵聽器實現的代碼帶入方法中,從而使其更清晰。

還有一種情況是匿名內部類可以訪問創建它們的方法中的最終變量。你不能用預先寫好的課程來完成(儘管你可以將變量傳遞給控制器​​)​​。

單獨的代碼是可重用的 - 所以如果你在多個地方有相同的監聽器,那麼它是明顯的贏家。

3

只有當你的類確實是一個ActionListener(是一種關係)並將用作其他地方的ActionListener,它應該實現ActionListener。

如果它僅在內部用作ActionListener,則實現ActionListener將將實現細節泄漏給類的API。在這種情況下使用組合(具有一種關係)。

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

0

如果您使用匿名類,代碼更具可讀性,但您可能無法重新使用它。

所以,我只會使用一個匿名類,如果它很短,我絕對確保我不必在任何地方再次使用它。