[英]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.