3.1 Outro exemplo: listeners

Interfaces funcionais são amplamente utilizadas em listeners de eventos. Antes do Java 8, era comum utilizar classes anônimas para implementar esses listeners. Um exemplo clássico é o uso de ActionListener para capturar o clique de um botão:

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("evento do click acionado");
}
});
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("evento do click acionado");
    }
});
button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("evento do click acionado"); } });

Enter fullscreen mode Exit fullscreen mode

Transformando em Expressão Lambda
A interface ActionListener contém apenas um método abstrato (actionPerformed(ActionEvent e)), o que permite seu uso com expressões lambda:

button.addActionListener((event) -> {
System.out.println("evento do click acionado");
});
button.addActionListener((event) -> {
    System.out.println("evento do click acionado");
});
button.addActionListener((event) -> { System.out.println("evento do click acionado"); });

Enter fullscreen mode Exit fullscreen mode

Podemos simplificar ainda mais, removendo os parênteses e as chaves:

button.addActionListener(event -> System.out.println("evento do click acionado"));
button.addActionListener(event -> System.out.println("evento do click acionado"));
button.addActionListener(event -> System.out.println("evento do click acionado"));

Enter fullscreen mode Exit fullscreen mode

Agora, a implementação do clique ocupa apenas uma linha de código, tornando o código mais legível e conciso!

Outras Interfaces Funcionais
Além de ActionListener, outras interfaces Java pré-Java 8 seguem o mesmo padrão de um único método abstrato, permitindo o uso de expressões lambda:

java.util.Comparator
java.util.concurrent.Callable
java.io.FileFilter
java.lang.Runnable (já visto anteriormente)

Mesmo sem modificações internas, todas essas interfaces podem ser chamadas oficialmente de interfaces funcionais a partir do Java 8.

原文链接:3.1 Outro exemplo: listeners

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
Happiness isn't about getting what you want all the time, it's about loving what you have.
幸福并不是一味得到自己想要的,而是珍爱自己拥有的
评论 抢沙发

请登录后发表评论

    暂无评论内容