首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候在解耦的设计中使用内部类?

什么时候在解耦的设计中使用内部类?
EN

Stack Overflow用户
提问于 2014-10-22 19:05:38
回答 2查看 86关注 0票数 1

我经常看到人们为听众编写内部类,比如swing。

代码语言:javascript
复制
   button.addActionListener(new ActionListener() {     
        public void actionPerformed(ActionEvent e) {
            //some action
        }
    });

在我的大学,有很多强调设计是解耦使用设计模式,如MCV或MVP。

我什么时候想要使用内部类而不是解耦的方式来实现它呢?

我唯一的猜测是物体什么时候不需要交互?(或者懒惰?)

(学生)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-22 19:11:49

这实际上被称为匿名内部类。如果只需要使用类一次,就会使用它。

当然,它也会减少代码的大小,除非它覆盖了许多特性(当然,为了便于阅读,我更喜欢匿名类,而不是体积小的类)。

票数 1
EN

Stack Overflow用户

发布于 2014-10-22 19:54:45

这种匿名内部类称为参数定义的内部类,并作为方法调用的一部分自动实例化。

在方法参数中,我们得到一个类的对象,它是ActionListener接口的子类,但是新创建的类没有任何名称(匿名),所以在控件通过这个语句之后,我们不能再次创建它的对象。

  1. 现在,在实现ActionPerformed接口的匿名内部类中,我们重写非常特定于该按钮的actionPerformed()方法,然后新关键字创建这个匿名类的对象,它将自动作为参数传递。
  2. 或者您也可以创建一个新类(比如myListener),它扩展了ActionListener类并重写了它的actionPerformed()方法。然后创建myListener的一个新对象,并将其作为参数传递给addActionListener()方法。

如果使用metohod 2,可以看到是否有10个按钮,每个按钮必须执行不同的任务,那么您必须创建10个ActionPerformed实现者类,并将对象传递给这些实现者类的addActionListener()方法。使用这种方法只为单个对象创建一个全新的类是完全愚蠢的。

这就是为什么大多数侦听器作为匿名内部类的对象传递的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26515171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档