DEV Community

Igor Rudel
Igor Rudel

Posted on

Interface Funcional: EVITE esse uso!

Na atual versão LTS do Java (21) existem muitas interfaces funcionais, dentre as principais: Function, Predicate, Supplier e Consumer.

Existem muitas outras no pacote java.util.function

É comum vermos uso de tais interfaces como no exemplo do código abaixo:

private static class ClassMapperFn implements Function<Integer, String> {

        @Override
        public String apply(final Integer integer) {
            return integer.toString();
        }
}
Enter fullscreen mode Exit fullscreen mode

Em 98% dos casos (se não 100), no meu ponto de vista, isto é uma má utilização das interfaces funcionais.

Vejamos o código abaixo:

private static class ClassMapper {

        public String apply(final Integer integer) {
            return integer.toString();
        }
}
Enter fullscreen mode Exit fullscreen mode

Ele possui o MESMO comportamento e tem a mesma aplicabilidade que o de cima! Afinal o Java é esperto o suficiente para entender que implicitamente o método é uma Function, de um tipo para outro!

Aplicando o exemplo com a definição explícita:

final var mapperFn = new ClassMapperFn();
System.out.println(mapperFn.apply(101));

Stream.of(1, 2, 3, 4, 5)
   .map(mapperFn::apply)
   .forEach(System.out::println);
Enter fullscreen mode Exit fullscreen mode

Aplicando o exemplo com a definição implícita:

final var mapper = new ClassMapper();
System.out.println(mapper.apply(101));

Stream.of(1, 2, 3, 4, 5)
   .map(mapper::apply)
   .forEach(System.out::println);
Enter fullscreen mode Exit fullscreen mode

São exatamente iguais! Ou seja, é verboso e desnecessário a definição explícita.

Por último, mas não menos importante, no momento de desenvolvimento é comum usarmos atalhos de nossas IDE's para identificarmos usos de variáveis, métodos, classes e etc.
Eu utilizo de IDE o IntelliJ e, por padrão, dois atalhos que faço uso em análises de código são: Ctrl + Mouse 1, ou, Alt + F7. Ambos os atalhos se usados em um método sobreescrito de uma implementação de função (caso 1) exibem TODOS os locais (do projeto e dependências) onde é utilizado o "apply" da Function do Java, se usado no método sem sobreescrita do método da função (caso 2) exibe APENAS os locais usados na aplicação.

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

Image of Datadog

Create and maintain end-to-end frontend tests

Learn best practices on creating frontend tests, testing on-premise apps, integrating tests into your CI/CD pipeline, and using Datadog’s testing tunnel.

Download The Guide

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay