当前位置: 首页 > 面试题库 >

侦听器和适配器之间有什么区别?

张银龙
2023-03-14
问题内容

我试图区分侦听器和适配器。

它们是否几乎相同,但是在侦听器中,您必须实现接口中的所有方法,但是对于适配器,您可以选择仅实现所需的方法,从而使代码更简洁,更易于阅读?

我还被告知适配器只能通过一种实现实现实例化,而您不能实例化侦听器,我对此并不完全了解。

有人可以解释使用哪一种更好,而另一种却不能用吗?


问题答案:

WindowListener是interface强制您使用override所有方法的方法,而WindowAdapter是实施方法的,WindowListener您只需要override处理您要处理的方法即可。

WindowListener是接口,意味着你不能实例化的WindowListener,同时WindowAdapter是具体的类,您可以使用new操作符来实例化。

使用时WindowAdapter,代码仅在您的类仅覆盖所需的方法的地方更干净。例如:

WindowListener

public class CloseListener implements WindowListener {
    // im not interest  on this event, but still need to override it
    @Override
    public void windowOpened(WindowEvent e) {

    }
    // im not interest  on this event, but still need to override it    
    @Override
    public void windowClosing(WindowEvent e) {

    }

    @Override
    public void windowClosed(WindowEvent e) {
        System.exit(0);

    }
    // im not interest  on this event, but still need to override it    
    @Override
    public void windowIconified(WindowEvent e) {

    }
    // im not interest  on this event, but still need to override it
    @Override
    public void windowDeiconified(WindowEvent e) {

    }

}

窗口适配器

使用适配器时,代码更干净:

// at JFrame class
addWindowListener(new CloseListener());

// reusable Close Listener
public class CloseListener extends WindowAdapter {
    @Override
    public void windowClosed(WindowEvent e) {
        System.exit(0);
    }
}

要么

addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosed(WindowEvent e) {
         System.exit(0);
     }
});

所以我建议使用WindowAdapter,但不必 遵循
。但是,两个API几乎相同,只是为了WindowAdapter方便创建侦听器对象而存在。

编辑:

由于WindowListenerinterface,因此您可以在JFrame子类中实现它。

public class MainWindow extends JFrame implements WindowListener {
    // this is ok
}
public class MainWindow extends JFrame, WindowAdapter {
    // this is not allow
}

但是你不能用WindowAdapter



 类似资料:
  • 我们有web服务(jaxws),它正在调用另一个web服务(aslo jaxws)。Jaxws客户端配置如下所示-- 正如您所看到的,我们有两个拦截器和一个故障侦听器。我们希望在这些拦截器、故障侦听器和web服务代码之间进行通信。正如SO线程中所述,我们使用cxf交换对象在web服务和拦截器之间进行通信。 我们的inFaultInterceptor代码如下所示-- } Web服务代码如下所示- 但

  • 问题内容: Servlet中具有过滤器和侦听器功能。我想知道Filter和Listener之间的确切区别。 问题答案: Servlet筛选器用于监视客户端到Servlet的请求和响应,或修改请求和响应,或审计和记录。 Servlet Listener用于侦听Web容器中的事件,例如,当您创建会话或在会话中放置属性,或者在钝化并在另一个容器中激活时,可以在中配置侦听器以订阅这些事件,例如例子。

  • 我刚接触Spring,我读到BeanFactory也称为基本IOC,ApplicationContext称为高级IOC。 我读到: BeanFactory容器是为DI提供基本支持的最简单的容器,由org.springframework.beans.factory.BeanFactory接口定义。BeanFactory和相关接口,如BeanFactoryAware、InitializingBean、

  • 问题内容: 使用Docker时,我们从基础映像开始。我们启动它,创建更改,并将这些更改保存在形成另一个映像的层中。 因此,最终我为自己的PostgreSQL实例提供了一个映像,为我的Web应用程序提供了一个映像,对它们的更改将继续保留。 什么是容器? 问题答案: 图像的实例称为容器。您有一张图像,该图像是您描述的一组图层。如果启动此映像,则该映像具有正在运行的容器。您可以有多个运行中的同一图像容器

  • 问题内容: 今天我收到了这个问题,我想我回答的很不好。我说过流是流动的数据,而阅读器是一种我们从中读取的技术,它是静态数据。我知道这是一个糟糕的答案,因此请通过Java示例为我提供这两者之间的清晰区别和定义。 谢谢。 问题答案: 正如其他人所说,每种情况的用例略有不同(即使它们经常可以互换使用) 由于阅读器用于读取字符,因此当您处理文本性质的输入(或以字符表示的数据)时,它们会更好。我之所以说得更

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型