Java侦听器的内部类,这是不好的做法吗?

时间:2018-07-25 07:39:29

标签: java model-view-controller

这是正确的方法吗? 我使用MVC模式。

在我的View班上,我有一个Button

Button fooButton = new Button();

public void addFooButtonListener(ActionListener foo){
    fooButton.addActionListener(foo);
}

在我的Controller类构造函数中:

 this.theView.addFooButtonListener(new Listener());

在Controller类中,我使用一个名为Listener的内部类

class Listener implements ActionListener {
    public void actionPerformed(ActionEvent e){
        //do whatever i want
    }
}

有人告诉我,这不是正确的方法吗? 这是真的?如果是,正确的方法是什么?

1 个答案:

答案 0 :(得分:2)

作为共享帐户,您当前的代码完全可以,而且没有任何问题。但是,您可以使用以下实现:

匿名课程:

new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        // To Do :: Task here
    }
}

Lambda表达式:

button.addActionListener(e -> {
    // Task implementation here
});

尽管这取决于要求,但是我在实现中看到的唯一缺点是当您有多个具有不同操作的按钮时,这种情况最终会导致大量的内部类。

此外,如果您认为可以在不同的类中使用相同的动作,则可以制作一个单独的类,该类可以在ActionListener包中实现listeners,然后在所有类中使用它。

同样,所有内容都是特定于需求的,因此您可以选择最适合您项目的任何内容。