我试图区分监听器和适配器。
它们是否几乎相同,但在监听器中您必须实现接口(interface)中的所有方法,但使用适配器您可以选择只实现您需要的方法,这样代码就更简洁、更易于阅读?
我还被告知适配器只能通过一种实现来实现实例化,而您不能实例化监听器,我不完全理解这一点。
谁能解释一下哪一个更好用,以及你可以用一个做什么但你不能用另一个?
最佳答案
WindowListener是 interface
这迫使你 override
所有方法,而 WindowAdapter是 WindowListener
的实现你只需要override
您有兴趣处理的方法。
WindowListener
是接口(interface),这意味着您无法实例化 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
.
关于java - 监听器和适配器有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10470104/