我在以下位置阅读有关新功能的信息:http : //www.javaworld.com/article/2078836/java-se/love-and-hate-for-java-8.html
我看到了下面的示例:
使用匿名类:
button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { System.out.println("Action Detected"); } });
使用Lambda:
button.addActionListener(e -> { System.out.println("Action Detected"); });
如果某人MouseListener想要在匿名类中实现多个方法,该怎么办,例如:
MouseListener
public void mousePressed(MouseEvent e) { saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse released; # of clicks: " + e.getClickCount(), e); }
… 等等?
你可以通过使用辅助程序接口将多方法接口与lambda一起使用。这适用于这样的侦听器接口,在这些接口中,不需要的方法的实现是微不足道的(即,我们也可以做MouseAdapter提供的事情):
MouseAdapter
// note the absence of mouseClicked… interface ClickedListener extends MouseListener { @Override public default void mouseEntered(MouseEvent e) {} @Override public default void mouseExited(MouseEvent e) {} @Override public default void mousePressed(MouseEvent e) {} @Override public default void mouseReleased(MouseEvent e) {} }
你只需要定义一次这样的帮助程序接口。
现在,你可以Component c像这样添加点击事件的侦听器:
Component c
c.addMouseListener((ClickedListener)(e)->System.out.println("Clicked !"));
从JLS 9.8起
功能接口是仅具有一种抽象方法的接口,因此表示单个功能协定。
Lambda需要这些功能接口,因此仅限于它们的单一方法。仍然需要使用匿名接口来实现多方法接口。
addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { ... } @Override public void mousePressed(MouseEvent e) { ... } });