DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

1

Referências a métodos de instância

  • Definição: Uma referência a um método de instância é criada com a seguinte sintaxe:

refObj::nomeMétodo

  • Diferença de métodos estáticos: Em vez de usar o nome de uma classe, utiliza-se uma referência de objeto.

  • Comportamento: O método referenciado opera em relação ao objeto específico (refObj).

Exemplo:

  • Reutilização da interface:
    Interface IntPredicate e método test() são usados novamente.

  • Nova classe criada:
    Nome: MyIntNum.

  • Responsabilidade:
    Armazena um valor inteiro.
    Define o método isFactor() para verificar se um número é fator do valor armazenado.

  • Execução no main():
    Instâncias: Duas instâncias de MyIntNum são criadas.

  • Referência de método:
    numTest() é chamado passando uma referência ao método isFactor() e o número a ser testado.
    A referência funciona com relação ao objeto específico.

// Usa uma referência a um método de instância.
// Interface funcional para predicados numéricos que opera com
// valores inteiros.
interface IntPredicate {
boolean test(int n);
}
// Esta classe armazena um valor int e define o método de
// instância isFactor(), que retorna true quando seu argumento
// é fator do valor armazenado.
class MyIntNum {
private int v;
MyIntNum(int x) { v = x; }
int getNum() { return v; }
// Retorna true se n for fator de v.
boolean isFactor(int n) {
return (v % n) == 0;
}
}
class MethodRefDemo2 {
public static void main(String args[])
{
boolean result;
MyIntNum myNum = new MyIntNum(12);
MyIntNum myNum2 = new MyIntNum(16);
// Aqui, uma referência ao método isFactor é criada em myNum.
IntPredicate ip = myNum::isFactor;
// Agora, ela é usada para chamar isFactor() via test().
result = ip.test(3);
if(result) System.out.println("3 is a factor of " + myNum.getNum());
// Desta vez, uma referência ao método isFactor é criada em myNum2.
// e usada para chamar isFactor() via test().
ip = myNum2::isFactor;
result = ip.test(3);
if(!result) System.out.println("3 is not a factor of " + myNum2.
getNum());
}
}

Referência de Método para um Objeto Específico

IntPredicate ip = myNum::isFactor;

  • A referência de método ip aponta para o método de instância isFactor() no objeto myNum.

  • Ao chamar ip.test(3), o método isFactor() é executado em myNum.

  • Outra referência como myNum2::isFactor funciona da mesma forma, mas opera em myNum2.

Referência de Método para Qualquer Objeto de uma Classe

NomeClasse::nomeMétodoInstância

  • O nome da classe é usado para referenciar um método de instância aplicável a qualquer objeto dessa classe.

  • O primeiro parâmetro da interface funcional se torna o objeto chamador do método.

  • Interface: MyIntNumPredicate

  • Método: test(MyIntNum obj, int value)

  • Permite usar a referência MyIntNum::isFactor para qualquer objeto da classe MyIntNum.

// Usa uma referência de método de instância para referenciar
// qualquer instância.
// Interface funcional para predicados numéricos que opera com um
// objeto de tipo MyIntNum e um valor inteiro.
interface MyIntNumPredicate {
boolean test(MyIntNum mv, int n);
}
// Esta classe armazena um valor int e define o método
// de instância isFactor(), que retorna true quando seu
// argumento é fator do valor armazenado.
class MyIntNum {
private int v;
MyIntNum(int x) { v = x; }
int getNum() { return v; }
// Retorna true se n for fator de v.
boolean isFactor(int n) {
return (v % n) == 0;
}
}
class MethodRefDemo3 {
public static void main(String args[])
{
boolean result;
MyIntNum myNum = new MyIntNum(12);
MyIntNum myNum2 = new MyIntNum(16);
// Esta instrução faz inp referenciar o método de
// instância isFactor().
// Referência de método para qualquer objeto de tipo MyIntNum
MyIntNumPredicate inp = MyIntNum::isFactor;
// A instrução a seguir chama isFactor() em myNum.
result = inp.test(myNum, 3);
if(result)
System.out.println("3 is a factor of " + myNum.getNum());
// A próxima instrução chama isFactor() em myNum2.
result = inp.test(myNum2, 3);
if(!result)
System.out.println("3 is a not a factor of " + myNum2.getNum());
}
}

Observe: MyIntNumPredicate inp = MyIntNum::isFactor;

  • A referência ao método de instância isFactor() permite que ele funcione com qualquer objeto do tipo MyIntNum.

  • test() é chamado através da referência, como em inp.test(myNum, 3), isso resulta em uma chamada a myNum.isFactor(3), onde myNum é o objeto no qual o método é executado.

Image of Datadog

How to Diagram Your Cloud Architecture

Cloud architecture diagrams provide critical visibility into the resources in your environment and how they’re connected. In our latest eBook, AWS Solution Architects Jason Mimick and James Wenzel walk through best practices on how to build effective and professional diagrams.

Download the Free eBook

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs