java动作监听器:实现vs匿名类

noo*_*REF 5 java event-handling anonymous-class actionlistener implements

我正在尝试自学Java并且有一个我到目前为止无法回答的问题.在我的一些在线阅读中,我发现了两种使用动作监听器的方法,它们似乎做同样的事情.但我试图找出一个优于另一个的优势/劣势.

使用这样的匿名类是否更好:

public MyClass() {
...
    myButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            //doSomething
        }
    });
...
}
Run Code Online (Sandbox Code Playgroud)

或者最好是在类的开头实现,如下所示:

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

    public void actionPerformed(ActionEvent e) {
        //doSomething
    }
...
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*m B 1

这实际上归结为一种风格。两者在代码中的执行方式完全相同。

单独的类往往会使实际方法中的代码更简单,而匿名内部类则在方法中引入侦听器实现的代码,这可以使其更清楚地了解它正在做什么。

还有一种情况是,匿名内部类可以在创建它们的方法中访问最终变量。您不能使用预先编写的类来做到这一点(尽管您可以将变量传递到控制器中)。

单独的代码是可重复使用的 - 因此,如果您在多个位置有相同的侦听器,那么它显然是赢家。