我试图区分侦听器和适配器。
它们是否几乎相同,但是在侦听器中,您必须实现接口中的所有方法,但是对于适配器,您可以选择仅实现所需的方法,从而使代码更简洁,更易于阅读?
我还被告知适配器只能通过一种实现实现实例化,而您不能实例化侦听器,我对此并不完全了解。
有人可以解释使用哪一种更好,而另一种却不能用吗?
WindowListener是interface
强制您使用override
所有方法的方法,而WindowAdapter是实施方法的,WindowListener
您只需要override
处理您要处理的方法即可。
WindowListener
是接口,意味着你不能实例化的WindowListener
,同时WindowAdapter
是具体的类,您可以使用new
操作符来实例化。
使用时WindowAdapter
,代码仅在您的类仅覆盖所需的方法的地方更干净。例如:
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
方便创建侦听器对象而存在。
编辑:
由于WindowListener
是interface
,因此您可以在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调用类型参数节的类型