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.
暂无评论内容