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");
}
});
🔹 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");
});
Podemos simplificar ainda mais, removendo os parênteses e as chaves:
button.addActionListener(event -> System.out.println("evento do click acionado"));
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. 🚀
Top comments (0)