DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

1

Referências de método

  • Conceito: Uma referência de método permite referenciar um método sem executá-lo.

  • Relação com expressões lambda: Ambas requerem um contexto de tipo de destino composto por uma interface funcional compatível.

  • Instância funcional: Uma referência de método cria uma instância de uma interface funcional quando avaliada.

Referências a Métodos Estáticos

  • O nome da classe e o método são separados por dois pontos duplos (::), introduzidos no JDK 8.

  • Pode ser usada onde for compatível com o tipo de destino.

Exemplo de Referência a Métodos Estáticos

  • Interface funcional:
    Nome: IntPredicate
    Método: test(int value)
    Parâmetros: um inteiro.
    Retorno: um booleano (testa condições sobre valores inteiros).

  • Classe auxiliar:
    Nome: MyIntPredicates
    Métodos estáticos implementados:
    isPrime(): verifica se o número é primo.
    isEven(): verifica se o número é par.
    isPositive(): verifica se o número é positivo.

  • Método principal:
    Nome: numTest()
    Parâmetros:
    Uma referência à interface IntPredicate.
    Um número inteiro a ser testado.

  • Execução:
    No método main(), três testes são realizados com numTest().
    Para cada teste, uma referência de método específica (isPrime, isEven, isPositive) é passada como argumento para a execução.

// Demonstra uma referência a um método estático.
// Interface funcional para predicados numéricos que opera com
// valores inteiros.
interface IntPredicate {
boolean test(int n);
}
// Esta classe define três métodos estáticos que verificam um inteiro
// em relação a alguma condição.
class MyIntPredicates {
// Um método estático que retorna true quando um número é primo.
static boolean isPrime(int n) {
if(n < 2) return false;
for(int i=2; i <= n/i; i++) {
if((n % i) == 0)
return false;
}
return true;
}
// Um método estático que retorna true quando um número é par.
static boolean isEven(int n) {
return (n % 2) == 0;
}
// Um método estático que retorna true quando um número é positivo.
static boolean isPositive(int n) {
return n > 0;
}
}
class MethodRefDemo {
// Este método tem uma interface funcional como tipo de seu
// primeiro parâmetro. Logo, pode receber uma referência a
// qualquer instância dessa interface, inclusive uma criada
// por uma referência de método.
static boolean numTest(IntPredicate p, int v) {
return p.test(v);
}
public static void main(String args[])
{
boolean result;
// Aqui, uma referência ao método isPrime é passada para numTest().
result = numTest(MyIntPredicates::isPrime, 17);
if(result) System.out.println("17 is prime.");
// Em seguida, uma referência ao método isEven é usada.
result = numTest(MyIntPredicates::isEven, 12);
if(result) System.out.println("12 is even.");
// Agora, uma referência ao método isPositive é passada.
result = numTest(MyIntPredicates::isPositive, 11);
if(result) System.out.println("11 is positive.");
}
}

  • A referência ao método estático isPrime() é passada como argumento para o método numTest().

  • O método isPrime() é compatível com a interface funcional IntPredicate.

  • A expressão MyIntPredicates::isPrime cria uma referência onde isPrime() implementa o método test() de IntPredicate.

  • As outras chamadas a numTest() seguem o mesmo princípio de compatibilidade e funcionamento.

  • Qualquer método que tenha a assinatura boolean test(int n) pode ser usado como referência para a interface IntPredicate.

AWS Q Developer image

Your AI Code Assistant

Automate your code reviews. Catch bugs before your coworkers. Fix security issues in your code. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more