- 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 emmyNum2
.
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 tipoMyIntNum
.test()
é chamado através da referência, como eminp.test(myNum, 3)
, isso resulta em uma chamada amyNum.isFactor(3)
, ondemyNum
é o objeto no qual o método é executado.
Top comments (0)