[MÚSICA] Olá a todos, meu nome é Eduardo Guerra, estamos aqui no Curso de Desenvolvimento Ágil com Java Avançado. Estamos aqui uma última parte de lambda e vamos falar sobre referências de método. A gente vai aprender como que a gente passa referências diretas de método no lugar de expressões lambda. Então, às vezes, a única coisa que a gente tem que fazer é a invocação de método. Então, a gente vai ali fazer às vezes uma expressão lambda e fala assim: "Para cada produto, chame o método aumentarPreço". Às vezes é fácil, é igua mais igual a dois. A única coisa que tenho que fazer na minha expressão lambda é a invocação de método, que às vezes encapsula uma certa lógica que eu tenho. Nesses casos eu posso usar o "Method Reference". A referência de método é uma forma de dizer "para cada produto você vai chamar na classe 'produto' o método 'aumentar preço'". Então o "Method Reference" tem esta estrutura que eu coloco ali o nome da classe, o delimitador, que são dois "dois pontos" e o nome do método sem parenteses. É uma forma de eu estar referenciando o nome do método. E passando ele no lugar de uma expressão Lambda. Então, da mesma forma que posso passar o "Method Reference" no lugar de uma interface funcional, eu posso também atribuir "Method Reference" a uma varíavel do tipo de interface funcional. Então, eu posso, por exemplo criar o "Consumer<Produto>" e atribuir o "Produto: aumentarPreco", essa referência de método, no lugar do "Consumer". Então, na verdade, não é método, para quem conhece a API de reflexão, que a gente vai ver nas próximas aulas, o "Method Reference" não é uma referência direta ao método, não é a classe "Method". Na verdade, ele é uma sintaxe que tempo de compilação vai ser transformada naquela implementação da interface funcional, que a única coisa que vai fazer vai ser a invocação daquele método. Eu também consigo usar métodos estáticos, no caso, por exemplo, do "aumentarPreco", ele era método da classe produto, ou seja da classe que o método da interface funcional "Consumer" recebe como parâmetro, então, o "aumentarPreco" era método sem parâmetro. Se eu tenho método estático, como o "System.out::println", eu posso ter nesse caso, ele não é método da classe "produto", mas, aquele produto passado como parâmetro, vai ser passado como parâmetro para ele. A gente vê que existe uma certa inteligência ali como que ele faz esse casamento entre o retorno e os parâmetros da interface funcional. Então, por exemplo, se eu pegar e colocar ali o "runnable" que é uma interface funcional, que tem o método "run", que retorna "void", não tem parâmetro e eu passo ali "Produto::getPreco" e fala assim: "espere aí, você está me passando aqui método, mas eu vou invocar esse método quem?" Porque o "runnable", o método "run" não recebe ninguém como parâmetro então eu não tenho produto para invocar o método "getPreco". Por outro lado, eu posso usar o "Method Reference" diretamente uma instância. Eu posso, por exemplo, criar uma instância de produto, por exemplo, chamo a variável de "P", e aí eu coloco o "Method Reference" a partir do objeto e não a partir da classe. Nesse caso, eu posso atribuir para o "runnable", porque ele vai invocar aquele método na instância "P". Então, nesse caso, ele diz qual a instância que aquele método vai estar sendo invocado. Nesse caso funciona. Eu não vou aqui fazer todo detalhamento sobre isso aí, mas é importante que tenha encaixe do "Method Reference". Por exemplo, método, uma interface funcional, ela pode ter método, por exemplo, que receba dois parâmetros. E aí, se eu passo "Method Reference" que recebe aqueles mesmos dois tipos de parâmetro, ele aceita. Se a minha interface funcional, se ela recebe dois parâmetros e aí, por exemplo, eu passo o método de uma classe que é a classe do primeiro parâmetro e esse método recebe parâmetro, ele consegue fazer esse encaixe entre o que eu estou passando e o que a interface funcional espera, então tem que haver esse encaixe que o método que você está passando e a assinatura ali da interface funcional. Havendo este casamento, o "Method Reference" vai funcionar. Então, é isso. Espero que vocês tenham entendido como usar essas referências de método no lugar das expressões lambda, que é uma forma as vezes até pouco mais concisa, mais legível de você estar referenciando. Muito obrigado e até a próxima aula. [MÚSICA]