我经常看到人们为听众写内部课程,例如。
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//some action
}
});
在我的大学,我们非常重视使用MCV或MVP等设计模式解耦设计。
我什么时候想要以分离的方式使用内部类?
我唯一的猜测是物体不需要互动? (或懒惰??)
(学生)
答案 0 :(得分:1)
这实际上被称为匿名内部类。如果您只需要使用一次类,就可以使用它。
它还会减少代码的大小,除非它当然覆盖了许多功能(我个人更喜欢匿名类的大小以便于阅读)。
答案 1 :(得分:0)
这种匿名内部类称为参数定义的内部类,并作为方法调用的一部分自动实例化。
这里在方法参数中,我们得到一个类的对象,它是ActionListener接口的子类,但是新创建的类没有任何名称(匿名),所以我们不能在控件通过后再次创建它的对象这句话。
现在在实现ActionPerformed Interface的匿名内部类中,我们覆盖了actionPerformed()方法,该方法非常特定于该按钮,然后new关键字创建了这个匿名类的对象,它将自动作为参数传递。
或者您也可以创建一个新类(比如myListener),它扩展ActionListener类并覆盖其actionPerformed()方法。然后创建myListener的新对象并将其作为参数传递给addActionListener()方法。
如果你使用metohod 2.你可以看到你是否有10个按钮,每个按钮必须执行不同的任务,那么你必须创建10个ActionPerformed实现者类和 将对象传递给这些实现者类的addActionListener()方法。 使用这种方法为单个对象创建一个全新的类是完全愚蠢的。
这就是为什么大多数Listener作为匿名内部类的对象传递的原因。