DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

2 1 1

6.4 Referenciando métodos de instância

Criando um method reference para um objeto específico:

Se temos um objeto (rodrigo), podemos referenciar um de seus métodos como rodrigo::tornaModerador.
Exemplo:

Usuario rodrigo = new Usuario("Rodrigo Turini", 50);
Runnable bloco = rodrigo::tornaModerador;
bloco.run(); // Equivalente a rodrigo.tornaModerador()

Enter fullscreen mode Exit fullscreen mode

Esse method reference equivale a um lambda:

Runnable bloco2 = () -> rodrigo.tornaModerador();

Enter fullscreen mode Exit fullscreen mode

Diferença entre rodrigo::tornaModerador e Usuario::tornaModerador:

rodrigo::tornaModerador refere-se a um método de um objeto específico (rodrigo), podendo ser inferido como Runnable (pois não recebe parâmetros).
Usuario::tornaModerador refere-se ao método de qualquer objeto do tipo Usuario, e pode ser inferido como Consumer, pois precisa de um argumento (Usuario).

Exemplo:

Consumer<Usuario> consumer = Usuario::tornaModerador;
consumer.accept(rodrigo); // Invoca rodrigo.tornaModerador()

Enter fullscreen mode Exit fullscreen mode

Equivalente ao lambda:

Consumer<Usuario> consumer2 = u -> u.tornaModerador();

Enter fullscreen mode Exit fullscreen mode

Erros ao misturar tipos de referências:

Não é possível atribuir Usuario::tornaModerador a Runnable, pois este não recebe argumentos, enquanto Consumer exige um parâmetro.
Exemplo inválido:

Runnable consumer = Usuario::tornaModerador; // Erro de compilação!

Enter fullscreen mode Exit fullscreen mode

Conclusão:

Method references permitem referenciar métodos de instância de objetos específicos ou de qualquer instância de uma classe.
O compilador infere o tipo da interface funcional correta com base no contexto.

Top comments (0)

👋 Kindness is contagious

If you found this post useful, consider leaving a ❤️ or a nice comment!

Got it