繁体   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