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